Перехват сообщения WM_NOTIFY из пользовательского ListCtrl - PullRequest
0 голосов
/ 10 августа 2009

Мое приложение - c ++ и представляет собой комбинацию MFC и ATL. Часть, с которой я здесь работаю, это MFC.

У меня есть собственный класс управления списком в одном из моих диалогов, который наследуется от CListCtrl.

Я пытаюсь добавить обработчик для сообщения LVN_ITEMCHANGED, чтобы я мог обновить остальную часть диалоговой формы, которая зависит от содержимого списка. Более конкретно, у каждого элемента списка есть поле флажка, и мне нужно определить, когда это было изменено.

Проблема в том, что мой список не отправляет сообщение.

ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_OUTPUT_CMDS, OnLvnItemchangedListOutputCmds)

Это моя карта сообщений, и она отлично работает, я обнаружил другие сообщения, такие как LVN _ ITEMCHANGING, NM_CLICK и NM _ RELEASEDCAPTURE, просто изменив сообщение.

Поэтому я предполагаю, что пользовательский класс listctrl почему-то неправильно отправляет сообщение.

На этот вопрос можно ответить многими способами:
1. Как я могу опубликовать сообщение LVN_ITEMCHANGED из дочернего списка его родителю (диалоговое окно)?
2. Я даже ловлю правильное сообщение? Большинство из тех, что я пробовал, вызывали обновление слишком рано (то есть до обновления данных в списке). Когда я это делаю, диалоговое окно обновляется на основе предыдущего состояния списка.
3. Есть ли что-то еще, что я должен делать, а я нет? Я прошу это просто сделать его открытым.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2009

Я переместил этот вопрос на stackoverflow.com / questions / 1272398

Ответ опубликован там.

0 голосов
/ 12 августа 2009

Попробуйте добавить простой CListCtrl в ваш диалог, и посмотрите, сможете ли вы поймать сообщение от этого. Если вы можете, вы знаете, что проблема в одной из переопределенных функций (возможно, вы не перенаправляете события мыши в CListCtrl или что-то в этом роде).

...