У меня есть свой собственный список управления списком WTL.Как определить изменение выбора в моем WTL :: CListViewCtrl, а не в родительском?
CPopupList : public CWindowImpl<CPopupList, WTL::CListViewCtrl>,
Это прекрасно работает, за исключением одного: я хочу поймать уведомление при изменении выбора. Не в родительском окне (например: How to detect a CListCtrl selection change?), но в самом CPopupList, а затем выполните некоторые действия.
На самом деле, я хочу, чтобы появилось небольшое окно подсказки рядом с выбранным в данный момент элементом в качестве дополнительной информации о текущем элементе. Точно так же, как VS во время автозаполнения, давая больше информации о функциях/свойствах.
У кого-нибудь есть советы, как это сделать? спасибо.
Update:
Пробовал:
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)
Спасибо. Мой комментарий, как BEGIN_MSG_MAP_EX, так и MSG_OCM_NOTIFY, дает синтаксическую ошибку во время компиляции. BEGIN_MSG_MAP без _EX работает. Что я пробовал: REFLECTED_NOTIFY_CODE_HANDLER (LVN_ITEMCHANGED, OnListItemChanged) Я буду обновлять этот вопрос Но не работает – Zotyi
Вам нужно '#include' (файлы WTL в) –
'BEGIN_MSG_MAP_EX' является повышение WTL для ATL в' BEGIN_MSG_MAP' –