Как определить координаты элементов управления в сообщении WM_INITDIALOG? - PullRequest
1 голос
/ 30 декабря 2010

У меня возникают проблемы с определением (я считаю, что) клиентских координат (радиокнопки) элемента управления в сообщении WM_INITDIALOG DlgProc.

Вот что я пытаюсь:

// Retrieve coordinates of Control with respect to the screen.
RECT rectOrthoButton;
GetWindowRect(GetDlgItem(hWnd, IDC_ORTHO), &rectOrthoButton);

// Translate coordinates to more useful coordinates: those that
// are used on the dialog.
// In order to do the translation we have to find the top left
// point (coordinates) of the dialog's client:
POINT dlgTopLeft;
ClientToScreen(hWnd, &dlgTopLeft);

// With these coordinates we can do the translation.
// We're only interested in top and left, so we skip
// bottom and right:
rectOrthoButton.top    -= dlgTopLeft.y;
rectOrthoButton.left   -= dlgTopLeft.x;

use_top_and_left(rectOrthoButton.top, rectOrthoButton.left);

Я ожидал, что rectOrthoButton.top и .left будут верхними левыми координатами моего элемента управления относительно клиентской области диалога .Оказывается, это не так, и я не уверен, что они указывают, что rectOrthoButton.left равно -40.

Редактировать : Теперь, когда мне было приказано инициализировать ТОЧКУ с помощью

POINT dlgTopLeft = {0, 0};

(который я тупо забыл): Есть ли более короткий способ выполнить то, что я хочу?

1 Ответ

1 голос
/ 30 декабря 2010

Чтобы преобразовать точку в экранные координаты, точка должна содержать клиентские координаты (0, 0 в случае происхождения клиента) перед переходом к ClientToScreen.

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