Страница 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 - а это или подобное ?
кроче цель достигнута но как то коряво :D
вот код, когда изменяю чекбокс меняю картинку и всё работает.

Код: Выделить всё

	 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 хорошо подходит для выборки окна-источника сообщения и соответствующего кода.