Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.138.170] |
|
Сообщ.
#1
,
|
|
|
Вопрос по Treeview
Создание Treeview dwstytreeview = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS; e::linkhwnd[1] = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, NULL, dwstytreeview, 0, 0, 0, 0, hdlg, (HMENU) 1001, hinstance, NULL); Обработка сообщений //... case WM_NOTIFY: switch (LOWORD(wparam)) { case 1001: LinkTreeviewClick(GetParent(e::linkhwnd[1], lparam)); break; } return 0; //... void LinkTreeviewClick(HWND hwnd, LPARAM lparam) { // ? } Вопрос как определить по какому конкретно узлу был произведен клик мыши ? |
Сообщ.
#2
,
|
|
|
Цитата E.A. @ Вопрос как определить по какому конкретно узлу был произведен клик мыши ? Мне тоже стало интересно. Получилось, что достаточно сделать так: ... if(nmh->code == TVN_SELCHANGED) { .. } .. Если оставить "(nmh->code == NM_CLICK)", тогда по клику мыши процедура "LinkTreeviewClick" будет вызвана 2 раза. Причём сначала будет уведомление NM_CLICK, затем - TVN_SELCHANGED. По TVN_SELCHANGED будет получена правильная информация об итеме. А по NM_CLICK - информация по "предыдущему" итему, что не нужно. |
Сообщ.
#3
,
|
|
|
Цитата E.A. @ Исправил, без NM_CLICK if ((nmh->code == TVN_SELCHANGED) || (nmh->code == NM_SETFOCUS) || (nmh->code == NM_KILLFOCUS)) Все работает так как нужно. Спасибо Проблема в том, что такой код будет дергаться более 1 раза. Первый раз - для того пункта, с которого снимается выделение (или TVI_ROOT), второй раз - для того пункта, куда переключается. |