親ではなくWTL :: CListViewCtrlで選択の変更を検出する方法は?

独自のWTL派生リストコントロールがあります。

CPopupList : public CWindowImpl<CPopupList, WTL::CListViewCtrl>,

一つのことを除いて、うまくいきます:選択が変更されたときに通知をキャッチしたいです。親ウィンドウ(このように:How to detect a CListCtrl selection change?)ではなく、CPopupList自体で、いくつかのことを行います。

実際には、現在選択されているアイテムの横に、現在のアイテムの追加情報として小さなヒントウィンドウを表示する必要があります。 VSがオートコンプリート中に行うように、関数/プロパティに関する詳細情報を提供します。

誰にもこれを行う方法のヒントはありますか?
どうもありがとうございました。

更新:

試した:

BEGIN_MSG_MAP(CPopupList)
    REFLECTED_NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnListItemChanged)
    DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()

ただし、OnListItemChanged()は呼び出されません。
親では

REFLECT_NOTIFICATIONS()

追加されます。

Update2-ソリューション

私は問題を見つけました:

親のMSG_HANDLER:

BEGIN_MSG_MAP(CEditorCtrl)
    MESSAGE_RANGE_HANDLER(WM_KEYFIRST,WM_KEYLAST,DelegateMessages)
    ...
    MESSAGE_
    ...
    NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED,OnListItemChanged)
    CHAIN_MSG_MAP(parentType)
    ALT_MSG_MAP(11)
    COMMAND_HANDLER(IDC_PRINT_MONOCHROME,BN_CLICKED,OnPrintMonochromeButton)
    REFLECT_NOTIFICATIONS()
END_MSG_MAP()

REFLECT_NOTIFICATIONS()をALT_MSG_MAP(11)の上に移動し、最後にOnListItemChangedがコントロールで呼び出されます。

正しい:

    REFLECT_NOTIFICATIONS()
    ALT_MSG_MAP(11)
    COMMAND_HANDLER(IDC_PRINT_MONOCHROME,BN_CLICKED,OnPrintMonochromeButton)
ベストアンサー
とにかく通知メッセージは親に送信されますが、これを変更することはできません。通常は、親から子へのメッセージの反映が行われるため、[改善された]子は先祖によって生成された通知を処理できます。

親ウィンドウには、メッセージマップに反映ハンドラがあります。

#include <atlcrack.h>

BEGIN_MSG_MAP_EX(CMyDialog)
    // ...
    REFLECT_NOTIFICATIONS()
END_MSG_MAP()

コントロールには、コントロールの親によって反映されるWM_NOTIFY通知のハンドラーがあります。

BEGIN_MSG_MAP_EX(CPopupList)
    // ...
    //MSG_OCM_CTLCOLORSTATIC(OnReflectedCtlColorStatic) // Reflected WM_CTLCOLORSTATIC
    MSG_OCM_NOTIFY(OnReflectedNotify) // Reflected WM_NOTIFY
    DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()

OnReflectedNotifyは、コントロールの通知を処理できる場所ですが、親は(独自の処理の有無にかかわらず)通知を転送する責任があります。

WTL macros for handling reflected messagesのCodeProjectでこれに関する単語も参照してください。

転載記事の出典を記入してください: 親ではなくWTL :: CListViewCtrlで選択の変更を検出する方法は? - コードログ