TVN_SELCHANGING не получено
У меня есть приложение 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 - не работает
какие-либо идеи о том, в чем может быть проблема?
2 ответа
Решаемые. Моя проблема заключалась в том, что древовидное представление было многоцелевым, и такое дерево не отправляет уведомления TVN_SELCHANGING.
Вы не упомянули, зачем вам TVN_SELCHANGING. Событие запускается, когда меняются узлы дерева, и выбирается другой узел дерева.
В качестве альтернативы вы можете попробовать TVN_SELCHANGED или HitTest(). Я предоставляю ссылку MFC. http://msdn.microsoft.com/en-us/library/x0w7ft34.aspx