#c #winapi #wtl
#c #winapi #wtl
Вопрос:
Я написал простой графический интерфейс с использованием WTL:
Я все понял, что касается настройки окна, а также подключил меню и тому подобное, чтобы вызывать все, что я пожелаю. Но мне нужно знать, когда, например, кто-то устанавливает один из флажков в представлении списка или когда кто-то нажимает на кнопку.
Отправляют ли эти дочерние окна сообщение в главное окно, уведомляющее об изменении состояния, и согласуется ли это уведомление в целом между типами дочерних окон?
Комментарии:
1. Если вы программируете на WTL, ваш лучший друг — Spy . Запомните это! 🙂 (это инструмент, который включен в Visual Studio. Я думаю, он не установлен в «стандартной» установке)
2. @xanatos: Что мне с этим ДЕЛАТЬ? : P
3. Вы запускаете его 🙂 Вы запускаете приложение, за которым хотите следить. Вы делаете Window-> Обновить, чтобы быть уверенным. Spy-> Регистрировать сообщения, вы используете инструмент Finder, чтобы «найти» свое окно (обычно вы выбираете родительский элемент вашего элемента управления), вы начинаете с выбора всех сообщений на вкладке Сообщения и нажимаете Ok. Затем вы увидите, что оно захватывает 1 миллион бесполезных сообщений, и вы начинаете их отключать (WM_MOUSEMOVE, WM_MOUSELEAVE …) (вы можете щелкнуть правой кнопкой мыши по сообщению и выбрать Остановить протоколирование сообщения). Вы откроете для себя мир, стоящий за «старыми» элементами управления Winapi. Элементы управления WPF / Silverlight — это другой мир.
4. Другая возможность (обычно лучше). Вы начинаете в окне «window». Окно-> Обновить. Вы используете кнопку Найти окно. Вы находите элемент управления своим окном. ОК. В инспекторе свойств вы нажимаете Синхронизировать. Теперь элемент управления «выбран» в окне Window. Оттуда вы можете найти его родителей / дочерних элементов / братьев и сестер, щелкнуть правой кнопкой мыши на одном из них, Сообщения.
Ответ №1:
Дочерние уведомления обычно отправляются в родительское окно в виде WM_NOTIFY
WM_COMMAND
сообщений или.
Некоторые дочерние уведомления являются общими для большинства типов элементов управления (например NM_CLICK
, и NM_CUSTOMDRAW
), но в целом вам нужно посмотреть ссылку на уведомления для каждого типа элемента управления в MSDN, чтобы увидеть, что доступно. Для начала ссылка на уведомления listview находится здесь, а уведомления о кнопках — здесь.
Комментарии:
1. Не повсеместно. Некоторые уведомления (в основном старые) отправляются через
WM_COMMAND
.2. @Billy: Стандартный элемент управления listview поддерживает флажки с помощью
LVS_EX_CHECKBOXES
расширенного стиля. Я не смотрел на исходный код WTL, но я предполагаю, что он использует указанный стиль, а не делает что-то нестандартное.3. Я отредактировал / универсально / на / обычно /, поскольку иногда бывают исключения, такие как
WM_HSCROLL
.