У меня есть приложение win32, в главном окне есть кнопка.
Когда я нажимаю левую кнопку мыши, я получаю сообщение WM_LBUTTONDOWN, когда я отпускаю левую кнопку мыши, я получаю сообщение WM_LBUTTONUP, это нормально.
Однако, если при обработке сообщения WM_LBUTTONDOWN (пока я держу левую кнопку мыши), программа показывает модальное диалоговое окно, кнопка никогда не получит WM_LBUTTONUP.
Это становится проблемой, потому что в WM_LBUTTONDOWN программа сделала что-то, что нужно очистить в WM_LBUTTONUP. Теперь из-за модального диалога больше нет возможности прояснить ситуацию.
Есть ли лучший способ справиться с этим? Я попробовал SetCapture, кажется, все еще не может получить WM_LBUTTONUP.
Это вполне разумно. Когда вы показываете модальное диалоговое окно, он начинает свой собственный цикл модального сообщения. И он получит сообщение WM_LBUTTONUP
.
Основная проблема, которую вы испытываете, заключается в том, что вы показываете модальный диалог в ответ на WM_LBUTTONDOWN
, когда на самом деле вы должны показать его в ответ на WM_LBUTTONUP
. Попробуйте нажать кнопки в других приложениях и обратите внимание, что действие происходит только при нажатии кнопки. Вы должны поступать аналогичным образом и следовать стандартам платформы.