Неверно расположены представления на дополнительном мониторе, главное окно на основном мониторе - PullRequest
0 голосов
/ 06 марта 2020

Используя MF C, VS2017

У меня есть приложение MF C, а основная форма получена из

CMDIFrameWndEx

Тогда есть 5 дочерних Windows (и я убедился, что атрибут WS_CHILD установлен) типа

CMiniFrameWnd

, каждый из которых содержит либо CFormView, либо CListView, встроенный в него. Все эти встроенные windows создаются с помощью CreateView (). Теперь странным является то, что все 5 CMiniFrameWnd расположены на дополнительном мониторе, и я не знаю почему. Я проверил координаты ClientRect через GetClientRect () для 5 CMiniFrameWnd, и они выглядят нормально по отношению к CMDIFrameWndEx. Я использую SetWindowPos (), чтобы расположить все 5.

Я не понимаю, почему дочерний элемент Windows появляется на дополнительном мониторе, поскольку основное окно находится на основном мониторе. Я не использую MonitorFromWindow (), но мне не нужно это делать, так как это происходит на Первичном.

Есть ли что-то очевидное, что я делаю неправильно?

1 Ответ

0 голосов
/ 10 марта 2020

Отвечая на последнее, да, я делаю что-то в корне неправильно. Теперь проблема решена.

Если используется SetWindowPos () или MoveWindow (), предоставленные координаты должны быть Экранные координаты. Это была моя ошибка. Я предоставил Клиентские координаты, полученные из GetClientRect (). Использование GetWindowRect () дает координаты экрана. Это было для сохранения / восстановления Windows позиций в / из реестра. Но правильными функциями для сохранения / восстановления позиций окна являются GetWindowPlacement () / SetWindowPlacement ().

...