TVN_SELCHANGING没有收到

时间:2011-04-10 17:39:12

标签: 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()
};

Tree就像这样实现

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 个答案:

答案 0 :(得分:1)

解决。我的问题是treeview是多选的,那种树不发送TVN_SELCHANGED通知

答案 1 :(得分:0)

您还没有提到为什么需要TVN_SELCHANGING。当树节点发生更改并且正在选择另一个树节点时,将触发该事件。

作为替代方案,您可以尝试TVN_SELCHANGED或HitTest()。我正在提供MFC链接.. http://msdn.microsoft.com/en-us/library/x0w7ft34.aspx