2011-04-10 86 views
1

我有一个WTL81应用程序。 CMainFrame有一个子CPaneContainer,它有一个子窗口CTreeViewCtrl。问题是CTreeViewCtrl不会收到TVN_SELCHANGING消息。没有收到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) 

onfocus此实现 - 工作正常
OnItemExpanding - 工作正常
OnSelChanged - 不起作用

任何想法上可能是什么问题呢?

+0

你根本没有看到TVN_SELCHANGING?那么没有人被选中? – 2011-04-10 18:41:44

+0

项目选择正常,这只是我没有收到TVN_SELCHANGING通知。 – cprogrammer 2011-04-10 18:51:25

+0

使用Spy ++工具查看发生了什么。 – 2011-04-10 18:52:38

回答

1

解决。我的问题是,树视图是多选,这种树不发送TVN_SELCHANGING通知

0

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

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

+0

当选择即将从一个项目更改为另一个项目时,TVN_SELCHANGING被触发。这是我需要的。 TVN_SELCHANGED也没有解雇,HitTest我不认为它有帮助 – cprogrammer 2011-04-11 11:07:35