Страница 1 из 1
Комплексный вопрос про LVM_
Добавлено: 20 июн 2005, 22:18
Alezis
1.
Вот есть в окне список как и где послать и где и как перехватить LVM_SETITEM и др.
типа LVM_ . В принципе послать - это надо вызвать ListView_SetItem. Но вот если мне надо
обработать по своему - где энто сделать.
Ай ладно спрошу ещё ;-)
2.
Вот список тот же самый там есть кроме прочего чекбоксы (стиль LVS_EX_CHECKBOXES),
как мне при изменении чекбокса изменить отображение иконки, вообщето это уже сам...
короче где перехватить LVM_GETITEMSTATE насколько я понял его то и надо перехватывать,
т.к. в WindowProc как то не очень получается, или я чего то донт андерстэнд.
Добавлено: 21 июн 2005, 11:32
Kolinus
Совет такой - посмотри на сообщения с префиксом LVN - в контролах фишка в том что им сообщения приходят через нотификации (через сообщение WM_NOTIFY)
Добавлено: 24 июн 2005, 09:47
Alezis
Kolinus писал(а):Совет такой - посмотри на сообщения с префиксом LVN - в контролах фишка в том что им сообщения приходят через нотификации (через сообщение WM_NOTIFY)
WM_NOTIFY
idCtrl = (int) wParam;
pnmh = (LPNMHDR) lParam;
Но WM_NOTIFY там через lParam можешь обратиться к структуре NMHDR.code . Но туда сообщения типа LVM_ всёравно не передаются. А вот что написано про LVM_SETITEM, но нигде его словить всё равно не могу:
LVM_SETITEM
wParam = 0;
lParam = (LPARAM) (const LPLVITEM) pitem;
Добавлено: 24 июн 2005, 10:28
Kolinus
LVN_ITEMCHANGED - а это или подобное ?
Добавлено: 24 июн 2005, 15:25
Alezis
Kolinus писал(а):LVN_ITEMCHANGED - а это или подобное ?
кроче цель достигнута но как то коряво
вот код, когда изменяю чекбокс меняю картинку и всё работает.
Код: Выделить всё
NM_LISTVIEW* plv]
Я просто просмотрел это сообщение и обнаружил, что при изменении чекбоксов меняются 8192 и 4096 в параметре uNewState. Кароче поставил я их в обработку и по ним определяю действия, но откуда они и кто такие не понятно. В мсдне пока ничего не нашёл.
А всё таки интерестно где обрабатывать LVM_ ...
Добавлено: 27 июн 2005, 10:37
Eugie
Alezis, жестко кодировать константы, конечно, не дело. Для проверки состояния чекбокса есть спец.макрос:
Код: Выделить всё
BOOL ListView_GetCheckState(
HWND hwndLV,
UINT iIndex
);
Также см. MSDN
http://msdn.microsoft.com/library/defau ... erview.asp
Добавлено: 29 июн 2005, 12:45
Alezis
Ну да знаю такую мазу. Но вот тока при изменении чекбокса надо менять иконки, а это с помощью надо делать обработчика(т.е. внутри оного) а ListView_GetCheckState не подходит.
Добавлено: 29 июн 2005, 19:37
Eugie
Почему же не подходит?
Добавлено: 05 июл 2005, 23:56
Сергей Варбанец
:!: :!: :!: На вопрос об обработке кодов LVN_ и сообщений NM_ я могу посоветовать использовать сообщение WM_NOTIFY. Например,
case WM_NOTIFY:
{
NMHDR *p;
p=(LPNMHDR)lParam;
if(wParam==IDC_LIST1)
{
if(p->code==LVN_COLUMNCLICK/*NM_CLICK
и другое*/)
//некоторые действия }
break;
}
Для проверки [некоторыми действиями] может быть простой вызов exit(0). Всё работает безотказно. Структура NMHDR хорошо подходит для выборки окна-источника сообщения и соответствующего кода.