Комплексный вопрос про LVM_

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Комплексный вопрос про LVM_

Сообщение Alezis » 20 июн 2005, 21:18

1.
Вот есть в окне список как и где послать и где и как перехватить LVM_SETITEM и др.
типа LVM_ . В принципе послать - это надо вызвать ListView_SetItem. Но вот если мне надо
обработать по своему - где энто сделать.
Ай ладно спрошу ещё ;-)
2.
Вот список тот же самый там есть кроме прочего чекбоксы (стиль LVS_EX_CHECKBOXES),
как мне при изменении чекбокса изменить отображение иконки, вообщето это уже сам...
короче где перехватить LVM_GETITEMSTATE насколько я понял его то и надо перехватывать,
т.к. в WindowProc как то не очень получается, или я чего то донт андерстэнд.

Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 13:02
Откуда: Минск

Сообщение Kolinus » 21 июн 2005, 10:32

Совет такой - посмотри на сообщения с префиксом LVN - в контролах фишка в том что им сообщения приходят через нотификации (через сообщение WM_NOTIFY)
В SAD - все в SAD.

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 24 июн 2005, 08:47

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;

Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 13:02
Откуда: Минск

Сообщение Kolinus » 24 июн 2005, 09:28

LVN_ITEMCHANGED - а это или подобное ?
В SAD - все в SAD.

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 24 июн 2005, 14:25

Kolinus писал(а):LVN_ITEMCHANGED - а это или подобное ?
кроче цель достигнута но как то коряво :D
вот код, когда изменяю чекбокс меняю картинку и всё работает.

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

	 NM_LISTVIEW* plv]
Я просто просмотрел это сообщение и обнаружил, что при изменении чекбоксов меняются  8192 и  4096 в параметре uNewState. Кароче поставил я их в обработку и по ним определяю действия, но откуда они и кто такие не понятно. В мсдне пока ничего не нашёл.  
А всё таки интерестно где обрабатывать LVM_ ...

Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Сообщение Eugie » 27 июн 2005, 09:37

Alezis, жестко кодировать константы, конечно, не дело. Для проверки состояния чекбокса есть спец.макрос:

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

 
BOOL ListView_GetCheckState(
    HWND hwndLV,
    UINT iIndex
);
Также см. MSDN http://msdn.microsoft.com/library/defau ... erview.asp

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 29 июн 2005, 11:45

Ну да знаю такую мазу. Но вот тока при изменении чекбокса надо менять иконки, а это с помощью надо делать обработчика(т.е. внутри оного) а ListView_GetCheckState не подходит.

Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Сообщение Eugie » 29 июн 2005, 18:37

Почему же не подходит?

Сергей Варбанец
Сообщения: 1
Зарегистрирован: 05 июл 2005, 22:38
Откуда: Украина, Одесса

Сообщение Сергей Варбанец » 05 июл 2005, 22: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 хорошо подходит для выборки окна-источника сообщения и соответствующего кода.
VSP

Ответить