Почему фоновые окна не получают события мыши, когда я перетаскиваю окно переднего плана?
Когда я щелкаю неактивную область окна win32 на переднем плане (например, пустое место в строке меню) и перетаскиваю мышь, фоновые окна не получают события мыши. Кнопки не переходят в состояние наведения, курсор не изменяется и т. Д. Мышь "захватывается" окном переднего плана, хотя она также не получает сообщений, если только мышь не находится над ней. Это состояние сохраняется, пока я не отпущу кнопку мыши. Почему это так, и как я могу выйти из этого состояния программно, не отпуская кнопку мыши?
Исследуя эту проблему, я сначала подумал, что это связано с концепцией захвата мыши, но, похоже, это не так. GetCapture() возвращает NULL во время этого состояния, каким бы оно ни было.
Уточнение: это легко увидеть в самых простых приложениях. Создайте новый проект Win32 в Visual Studio с шаблоном проекта по умолчанию, который создает пустое окно. Запустите его, нажмите и удерживайте пробел внутри окна. Перетащите мышь за пределы окна и обратите внимание, что никакие кнопки в фоновых окнах не светятся и не реагируют на события при наведении курсора. Даже если я вставлю ReleaseCapture() в WndProc, чтобы он срабатывал после каждого сообщения, результат остается тем же. Похоже, что это не имеет ничего общего с захватом мыши в смысле Get/SetCapture.