Уже всё в мсдн по ссылкам перекопал, не могу понять, почему не приходят сообщения в оконную процедуру от дочернего окна TreeView.
В WinMain создаю окно со стилями: WS_OVERLAPPEDWINDOW|WS_VISIBLE,
Дочернее окно тривью со стилями WS_VISIBLE | WS_CHILD | TVS_HASLINES|TVS_LINESATROOT| TVS_HASBUTTONS| WS_THICKFRAME,
из БД достаю запросом данные из таблички для заполнения дерева, оно заполняется нормально, после этого входим в цикл обработки сообщений.
И в оконную процедуру главного окна не доходят сообщения (месседжбоксы не появляются)
case TVN_KEYDOWN:
MessageBox(hwnd,"TVN_KEYDOWN","Treeview",0);
return FALSE;
case TVN_SELCHANGED:
MessageBox(hwnd,"TVN_SELCHANGED","Treeview",0);
return FALSE;
case TVN_SELCHANGING:
//LPNMHDR lpnmh = (LPNMHDR) lParam;
MessageBox(hwnd,"TVN_SELCHANGING","Treeview",0);
return FALSE;
case NM_CLICK:
//LPNMHDR lpnmh = (LPNMHDR) lParam;
MessageBox(hwnd,"NM_CLICK","Treeview",0);
return FALSE;
При этом другие сообщения для родительского окна нормально обрабатываются (WM_COMMAND, WM_PAINT).
Подскажите куда копнуть, что я мог пропустить?
23 января 2009 в 16:01
Кажись, я уже разобрался… я просто неправильно понял фразу "This notification message is sent in the form of a WM_NOTIFY message".
МСДН лайбрери читаю локально… с сайта ссылка в данный момент почему-то не открывается…
в общем, насколько я понял из найденных экзамплов, надо так:
switch (msg)
{
case WM_NOTIFY:
switch ((LPNMHDR) lParam -> code){
case TVN_SELCHANGED:
………..
}
}
ну и если контролов несколько, то различать их по ID, в той же code поле idFrom.
Как-то не очевидно эт в MSDN описано просто, видать нада чаще программированием заниматься, а не (подставить по вкусу)….
23 января 2009 в 14:02
> case TVN_KEYDOWN:
для этого условия switch от какой переменной берешь?
мм.. что-то мне кажется, что мы разные msdn'ы читаем..
//msdn.microsoft.com/en-us/library/bb773540(VS.85).aspx