1

我有一个 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 - 不工作

关于可能是什么问题的任何想法?

4

2 回答 2

1

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

于 2011-04-12T20:02:12.370 回答
0

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

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

于 2011-04-11T08:26:05.853 回答