#c #winapi #atl #wtl
#c #winapi #atl #wtl
Вопрос:
У меня есть приложение WTL81. CMainFrame имеет дочерний CPaneContainer, который имеет дочернее окно CTreeViewCtrl. Проблема в том, что CTreeViewCtrl не получает сообщение TVN_SELCHANGING.
Я «подсмотрел» CTreeViewCtrl и его родительский элемент (CPaneContainer), но код уведомления не получен.
CMainFrame реализован из общедоступного CFrameWindowImpl<CMainFrame>
CPaneContainer реализован следующим образом
class PaneContainerReflectNotif : public CPaneContainer
{
BEGIN_MSG_MAP(PaneContainerReflectNotif)
CHAIN_MSG_MAP(CPaneContainer)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
};
Дерево реализовано следующим образом
class MyTreeView :
public CWindowImpl<CatalogTreeView, CTreeViewCtrl>,
public CCustomDraw<CatalogTreeView>,
public CTheme
...
BEGIN_MSG_MAP_EX(MyTreeView )
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
REFLECTED_NOTIFY_CODE_HANDLER_EX(NM_DBLCLK, OnDblClick)
REFLECTED_NOTIFY_CODE_HANDLER_EX(TVN_ITEMEXPANDING, OnItemExpanding)
REFLECTED_NOTIFY_CODE_HANDLER_EX(TVN_SELCHANGING, OnSelChanged)
OnDblClick — работает нормально
OnItemExpanding — работает нормально
OnSelChanged — не работает
есть идеи о том, в чем может быть проблема?
Комментарии:
1. Вы вообще не видите TVN_SELCHANGING? Значит, ничего не выбирается?
2. Элементы выбираются нормально, просто я не получаю уведомления о TVN_SELCHANGING.
3. Используйте инструмент Spy , чтобы посмотреть, что происходит.
4. Я подсмотрел как дерево, так и родительский элемент. Он получает уведомления (NM_CUSTOMDRAW, NM_KILLFOCUS, TVN_ITEMCHANGEING и т.д.), Но не TVN_SELCHANGING …
5. Попробуйте добавить REFLECT_NOTIFICATIONS() в карту сообщений вашего главного окна.
Ответ №1:
Решена. Моя проблема заключалась в том, что просмотр дерева был множественным, и такое дерево не отправляет уведомления о TVN_SELCHANGING
Ответ №2:
Вы не упомянули, зачем вам нужен TVN_SELCHANGING. Событие запускается при изменении узлов дерева и выборе другого узла дерева.
В качестве альтернативы вы можете попробовать TVN_SELCHANGED или hitTest( ). Я предоставляю ссылку на MFC .. http://msdn.microsoft.com/en-us/library/x0w7ft34.aspx
Комментарии:
1. TVN_SELCHANGING запускается, когда выбор собирается измениться с одного элемента на другой. Это то, что мне нужно. TVN_SELCHANGED также не запускается, но я не думаю, что это помогает