Поместить окно относительно родителя - PullRequest
1 голос
/ 02 февраля 2012

У меня есть простой немодальный диалог, который я хотел бы разместить в правом нижнем углу родительского окна. Я впервые работаю с Windows-формами в C (поэтому, пожалуйста, будьте терпеливы, если я не понимаю).

Я попытался установить окно с помощью SetWindowPos , но безрезультатно, поскольку координаты x и y относительно верхнего левого угла экрана.

//hWnd is the parent window
hwndStatusBox = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STATUSBOX), 
                             hWnd, svnStatusBoxProc); 

SetWindowPos(hwndStatusBox,NULL, 100, 100, 0, 0, 
             SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOZORDER);

Мне не хватает функции или мне нужно самостоятельно рассчитывать смещение?

Я не хочу использовать координаты, определенные в ресурсе, я хотел бы решить это программно.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Для этого есть функция:

ClientToScreen

, которая преобразует клиентскую координату в экранную координату.Например: -

message_box_position = {ParentWidth - MessageBoxWidth, ParentHeight - MessageBoxHeight}
ClientToScreen (parent_window_handle, &message_box_position)
SetWindowPos (message_box_handle, messahe_box_position)
3 голосов
/ 02 февраля 2012

Для окна верхнего уровня, т. Е. Не для дочернего окна, координаты действительно относятся к экрану.

Вам необходимо прочитать координатыИмея окно, определите, какое смещение вам нужно, добавьте смещение и, наконец, установите координаты для вашего диалога относительно начала экрана.Или вы можете позвонить ClientToScreen, передав hWnd, и заставить систему сделать это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...