我有自己的 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()
被添加。
更新 2 - 解决方案
我发现了问题:
父母的 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)