1

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- 動作しません

何が問題になる可能性があるかについてのアイデアはありますか?

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 に答える