У меня есть окно, в котором я обрабатываю сообщения WM_NCLBUTTONUP, чтобы обрабатывать щелчки на пользовательских кнопках в строке заголовка. Это прекрасно работает, когда окно развернуто, но когда это не так, сообщение WM_NCLBUTTONUP никогда не приходит! Я получаю сообщение WM_NCLBUTTONDOWN, хотя. Как ни странно, WM_NCLBUTTONUP появляется, если я щелкаю справа от строки меню, но в любом месте строки заголовка / рамки окна сообщение никогда не приходит.
Через некоторое время отладки я обнаружил, что если я установил точку останова на CMainFrame :: OnNcLButtonDown (), щелкнул панель заголовка, но удерживал кнопку мыши нажатой, оставил отладчик в функции, нажмите F5, чтобы продолжить отладку , затем отпустите кнопку мыши - волшебным образом отправляется WM_NCLBUTTONUP !!
Мой вопрос двоякий: (1) что, черт возьми, происходит? (2) как мне обойти эту «проблему».
Я также отмечаю, что в Интернете есть несколько других людей, имеющих такую же проблему (быстрый Google обнаруживает множество других людей с той же проблемой, но без решения).
Редактировать
Спасибо за первые два ответа, я попытался вызвать ReleaseCapture в NCLButtonDown, но это не имеет никакого эффекта (фактически, он возвращает NULL, указывая, что захват не на месте). Я могу только предположить, что функциональность базового класса (def window proc) может устанавливать захват. Я буду расследовать в понедельник ...