【发布时间】:2011-08-02 13:57:21
【问题描述】:
我有一个 WTL81 应用程序。 CMainFrame 有一个子 CPaneContainer,它有一个子窗口 CTreeViewCtrl。问题是 CTreeViewCtrl 没有收到 TVN_SELCHANGING 消息。
我“窥探”了 CTreeViewCtrl 和他的父级 (CPaneContainer),但没有收到任何通知代码。
CMainFrame 是从 public 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 - 不起作用
关于可能是什么问题的任何想法?
【问题讨论】:
-
您根本没有看到 TVN_SELCHANGING?那么什么都没有被选中?
-
项目选择正常,只是没有收到TVN_SELCHANGING通知。
-
使用 Spy++ 工具查看发生了什么。
-
我已经监视了 Tree 和 parent。它接收通知(NM_CUSTOMDRAW、NM_KILLFOCUS、TVN_ITEMCHANGEING 等)但不接收 TVN_SELCHANGING ...
-
尝试将 REFLECT_NOTIFICATIONS() 添加到您的主窗口消息映射中。