Как получить размер и положение кнопки управления диалоговым окном в файле ресурсов? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь программно создать диалоговое меню, размер которого изменяется в зависимости от разрешения экрана, и я могу получить размер и позиции диалогового окна, используя nameID диалогового окна после этого вопроса:

Получить размер диалога, как определено в файле ресурсов

Однако у меня возникают проблемы при попытке определить размер и положение элементов управления кнопки в диалоговом окне. Вот пример того, как диалог может выглядеть в файле ресурсов:

IDD_DLG DIALOG  0, 0, 300, 200
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,30,46,42,18
    PUSHBUTTON      "Cancel",IDCANCEL,145,46,42,18
END

Я могу получить размер и положение диалога, используя его nameID, то есть IDD_DLG, но возможно ли получить то же самое для DEFPUSHBUTTON или PUSHBUTTON программно?

Если так, то как? Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2019

MFC позволяет автоматически перемещать / изменять размер дочерних кнопок. На странице свойств ресурса нажмите кнопку диалога, перейдите в раздел динамического управления, включите динамическое изменение размера / перемещение для каждой кнопки.

Чтобы найти координаты кнопки относительно левого верхнего угла диалогового окна клиента:

Используйте GetWindowRect, чтобы найти прямоугольник кнопок в экранных координатах. Затем преобразуйте координаты экрана в координаты клиента:

CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    CRect rc;
    CWnd *wnd = GetDlgItem(IDOK);
    wnd->GetWindowRect(&rc);
    ScreenToClient(rc);
    ...
    //move/resize rc
    wnd->SetWindowRect(NULL, rc.left, rc.top, rc.Width(), rc.Height(), SWP_SHOWWINDOW);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...