У меня есть приложение, которое имеет несколько окон, и я хочу, чтобы некоторые из них (которые я назову CMyLockedFrameWndEx
, потому что они происходят от CFrameWndEx
) остаются там, где они были после изменения области отображения системы. Родитель всех окон моего приложения NULL.Положение окна замка на дисплее изменяется
Мне удалось поймать сообщение WM_DISPLAYCHANGE
, когда я перетаскиваю позицию второго монитора относительно первого; и я также пришел, чтобы поймать WM_DEVICECHANGE
, когда я подключаю или отсоединяю кабель HDMI второго монитора. Я перехватил их обоих в CMyLockedFrameWndEx::WindowProc
.
После этого происходит автоматическое переключение окна. Я заметил, что bacause я поставил точки останова на CMyLockedFrameWndEx::OnWindowPosChanging
и CMyLockedFrameWndEx::OnWindowPosChanged
, и они останавливаются после событий, которые я зацепил на WindowProc
. Этот рабочий процесс, кажется, не имеет отношения к поимке событий, которые я описал, как мой WindowProc
метода:
LRESULT CMyLockedFrameWndEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_DISPLAYCHANGE)
{
TRACE(_T("DISPLAY CHANGE"));
return 0L;
}
if (message == WM_SYSCOMMAND)
{
TRACE(_T("SYSCOMMAND"));
if (wParam == SC_MOVE)
{
return 0L;
}
}
if (message == WM_WININICHANGE)
{
TRACE(_T("WININICHANGE"));
if (wParam == SPI_SETWORKAREA)
{
return 0L;
}
}
return __super::WindowProc(message, wParam, lParam);
}
и при переходе в OnWindowPosChanging
или OnWindowPosChanged
, поток не исходит из конкретных случаев WindowProc
обрабатываемых мной. И это проблема.
Я попытался выполнить стек вызовов, чтобы посмотреть, какое окно отправило сообщение WM_WINDOWPOSCHANGING
или сообщение WM_WINDOWPOSCHANGED
, но мне это не удалось. Я даже пытался использовать Spy ++ 64, чтобы определить, кто был отправителем сообщения, но мне это не удалось. Вся идея увидеть, кто был отправителем, заключалась в том, что если это связано с изменением отображения системы, необходимо заранее обнаружить ее и импичтировать авторепозицию, чтобы даже произойти.
Как я еще не успел, что я могу сделать, чтобы окно не повлияло на изменение отображения системы?
Спасибо.
Не могли бы вы объяснить: что происходит с окном, расположенным на первом экране, например, (100,100) при подключении второго экрана? Это движется? Куда? –
Проблема не там. Проблема в том, что когда я отключу второй экран, я не хочу, чтобы система автоматически помещала окно на 1-ое. Я хочу, чтобы окно продолжало свое положение на втором экране, даже если я отсоединяю кабель. Конечно, это будет ** HIDDEN **, но это то, что я ищу. – sergiol