Как узнать об изменении состояния дочернего окна в WTL?

Я написал простой графический интерфейс с использованием WTL:

ластик центра безопасности

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

Отправляют ли эти дочерние окна сообщение в главное окно, уведомляющее об изменении состояния, и согласуется ли это уведомление между типами дочерних окон?


person Billy ONeal    schedule 18.10.2011    source источник
comment
Если вы программируете на WTL, ваш лучший друг - Spy ++. Помни это! :-) (это инструмент, который включен в Visual Studio. Я думаю, он не установлен в стандартной установке)   -  person xanatos    schedule 18.10.2011
comment
@xanatos: Что мне с этим делать? :П   -  person Billy ONeal    schedule 18.10.2011
comment
Вы запускаете его :-) Вы запускаете приложение, которое хотите шпионить. Вы делаете Window- ›Обновить на всякий случай. Spy- ›Log Messages, вы используете Finder Tool, чтобы найти ваше окно (обычно вы выбираете родительский элемент вашего элемента управления), вы начинаете со всего сообщения, выбирая на вкладке Message, и вы делаете Ok. Затем вы увидите, что он захватывает 1 миллион бесполезных сообщений, и вы начинаете их отключать (WM_MOUSEMOVE, WM_MOUSELEAVE ...) (вы можете щелкнуть правой кнопкой мыши сообщение и выбрать «Остановить запись сообщения»). Вы откроете для себя мир, скрывающийся за старыми элементами управления Winapi. Элементы управления WPF / Silverlight - это другой мир.   -  person xanatos    schedule 18.10.2011
comment
Другая возможность (обычно лучше). Вы запускаете в окне окно. Окно- ›Обновить. Вы используете кнопку «Найти окно». Вы находите контроль над своим окном. В порядке. В инспекторе свойств нажмите «Синхронизировать». Теперь элемент управления выбран в окне Window. Оттуда вы можете найти его родителей / детей / братьев и сестер, щелкнув правой кнопкой мыши по одному из них, «Сообщения».   -  person xanatos    schedule 18.10.2011


Ответы (1)


Дочерние уведомления обычно отправляются в родительское окно в форме _ 1_ или _ 2_ сообщений.

Некоторые дочерние уведомления являются общими для большинства типов элементов управления (например, NM_CLICK и NM_CUSTOMDRAW), но в целом вам необходимо просмотреть ссылку на уведомления для каждого типа элемента управления в MSDN, чтобы узнать, что доступно. Для начала ссылка на уведомления в виде списка: здесь, а уведомления кнопок - здесь.

person ildjarn    schedule 18.10.2011
comment
Не всегда. Некоторые уведомления (в основном старые) отправляются через WM_COMMAND. - person Raymond Chen; 18.10.2011
comment
@Billy: стандартный элемент управления списком поддерживает флажки через _ 1_ расширенный стиль. Я не смотрел исходный код WTL, но предполагаю, что он использует указанный стиль, а не делает что-то особенное. - person ildjarn; 18.10.2011
comment
Я редактировал / универсально / до / обычно /, так как бывают случайные исключения, такие как WM_HSCROLL. - person Raymond Chen; 18.10.2011