Кнопка потеряла WM_LBUTTONUP после появления модального диалогового окна

Вопрос:

У меня есть приложение win32, в главном окне есть кнопка.

Когда я нажимаю левую кнопку мыши, я получаю сообщение WM_LBUTTONDOWN, когда я отпускаю левую кнопку мыши, я получаю сообщение WM_LBUTTONUP, это нормально.

Однако, если при обработке сообщения WM_LBUTTONDOWN (пока я держу левую кнопку мыши), программа показывает модальное диалоговое окно, кнопка никогда не получит WM_LBUTTONUP.

Это становится проблемой, потому что в WM_LBUTTONDOWN программа сделала что-то, что нужно очистить в WM_LBUTTONUP. Теперь из-за модального диалога больше нет возможности прояснить ситуацию.

Есть ли лучший способ справиться с этим? Я попробовал SetCapture, кажется, все еще не может получить WM_LBUTTONUP.

Ответ №1

Это вполне разумно. Когда вы показываете модальное диалоговое окно, он начинает свой собственный цикл модального сообщения. И он получит сообщение WM_LBUTTONUP.

Основная проблема, которую вы испытываете, заключается в том, что вы показываете модальный диалог в ответ на WM_LBUTTONDOWN, когда на самом деле вы должны показать его в ответ на WM_LBUTTONUP. Попробуйте нажать кнопки в других приложениях и обратите внимание, что действие происходит только при нажатии кнопки. Вы должны поступать аналогичным образом и следовать стандартам платформы.

Оцените статью
TechArks.Ru
Добавить комментарий