"?"кнопка справки вызывает WM_HELP _и_ WM_LBUTTONUP - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть приложение Windows, которое регистрирует одну процедуру CALLBACK, которая обрабатывает сообщения WM_HELP для диалога, и одну процедуру CALLBACK, которая обрабатывает сообщения WM_LBUTTONUP для пользовательской кнопки.

Теперь, когда пользователь нажимает «?» Кнопка, затем нажимает пользовательскую кнопку, справка открывается, как и ожидалось (при нажатии кнопки мыши), НО, если окно справки не закрывает кнопку, сообщение WM_LBUTTONUP также запускается для пользовательской кнопки (при нажатии вверх мыши). Это заставляет кнопку срабатывать, когда пользователь только просит помощи.

Есть ли способ остановить отправку сообщения WM_LBUTTONUP, если кнопка нажата для помощи?

РЕДАКТИРОВАТЬ: Пользовательская кнопка реализована с использованием элемента управления STATIC. Я считаю, что это потому, что это должно иметь изображение, а не границы. Таким образом, он не отправляет уведомления BN_CLICKED. На самом деле, похоже, что он вообще не вызывает WM_COMMAND в родительском элементе.

Спасибо

Ответы [ 3 ]

6 голосов
/ 21 сентября 2011

Это нормально. Обязательно используйте уведомление BN_CLICKED кнопки, чтобы увидеть разницу. Генерируется, когда пользователь нажимает кнопку, не генерируется, когда пользователь использует курсор справки. Кнопка по-прежнему видит обычные сообщения кнопки вверх / вниз, так что это не хороший триггер для обнаружения щелчка. Дополнительным бонусом является то, что теперь кнопка также может быть нажата с помощью клавиатуры (пробел).

Хорошая библиотека классов позаботится об этих неприятных мелких деталях.

1 голос
/ 23 сентября 2011

Лучшим способом было бы создать ? в качестве пользовательского элемента управления со стилем BS_CHECKBOX | BS_PUSHLIKE и захватить мышь.После этого вы получите все сообщения WM_LBUTTONDOWN для этого пользовательского элемента управления, а затем вы можете использовать WindowFromPoint, чтобы получить окно, в котором произошло WM_LBUTTONDOWN, и отправить пользовательское уведомление родительскому окну.Родительское окно может затем показать всплывающую подсказку или открыть справочный документ или отменить его.

Преимущество заключается в том, что вы создаете элемент управления только один раз и можете использовать его в нескольких местах.

0 голосов
/ 22 сентября 2011

Хорошо, я исправил это, создав пользовательскую кнопку (статическое управление) со стилем SS_NOTIFY, а затем обработав уведомление STN_CLICKED в сообщении WM_COMMAND. (SS_NOTIFY заставляет WM_COMMAND срабатывать в родительском элементе при щелчке.) Это не срабатывает при использовании «?» кнопка. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...