Функция SetWindowPos () не перемещает окно? - PullRequest
1 голос
/ 25 июня 2009

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

void CspAceDlg::DrawResultsArea()
{
    CWnd* pTabCtl = GetDlgItem(IDC_BUILDTABS);
    CRect rectTabCtl; // Allocate CRect for control's position.
    pTabCtl->GetWindowRect(&rectTabCtl);
    int resX = rectTabCtl.right + 15;
    int resY = rectTabCtl.top;
    //RESULTS AREA
    results.Create(IDD_RESULTSDIALOG, this);
    results.SetWindowPos(this, resX, resY, /*608, 19, */175, 135, SWP_SHOWWINDOW);
    results.ShowWindow(SW_SHOW);
}

Моя проблема в том, что у моего диалогового ресурса (IDD_REULTSDIALOG) есть свойства, называемые X Pos и ​​Y Pos, которые, как представляется, переопределяют мой SetWindowPos () (и маленькая вкладка свойств в редакторе ресурсов не позволит мне оставить эти поля пустыми). Если я установлю эти свойства на 0, 0, мой диалог появится в верхнем левом углу основного диалога. Если я установлю их в число, я могу угадать и протестировать их примерно там, где я хочу, но затем запуск приложения с разными разрешениями приведет к тому, что диалог появится в разных местах. В любом случае, я действительно хочу поместить диалоговое окно относительно другого элемента управления в главное диалоговое окно (в данном случае элемент управления с вкладками). Почему мой SetWindowPos () игнорируется, и как мне это исправить? Должен ли я использовать другую функцию?

Ответы [ 2 ]

6 голосов
/ 25 июня 2009

Согласно документации для SetWindowPos , если вы передадите SWP_SHOWWINDOW, окно не будет перемещено:

Если установлен флаг SWP_SHOWWINDOW или SWP_HIDEWINDOW, окно не может быть перемещено или изменено в размере.

0 голосов
/ 25 июня 2009

Сам разобрался, во многом благодаря этой теме .

Мой код выглядел так:

void CspAceDlg::DrawResultsArea()
{
    CRect rectTabCtl; // CRect representing tab control's position.
    POINT pResXY;
    POINT pResWH;

    CWnd* pTabCtl = GetDlgItem(IDC_BUILDTABS);
    pTabCtl->GetWindowRect(&rectTabCtl);

    pResXY.x = rectTabCtl.right + 15;
    pResXY.y = rectTabCtl.top;
    pResWH.x = pResXY.x + 175;
    pResWH.y = pResXY.y + 135;
    ScreenToClient(&pResXY);
    ScreenToClient(&pResWH);
    //RESULTS AREA
    results.Create(IDD_RESULTSDIALOG, this);
    //results.SetWindowPos(this, resX, resY, /*608, 19, */175, 135, SWP_SHOWWINDOW);
    results.MoveWindow(pResXY.x, pResXY.y, pResWH.x, pResWH.y, TRUE);
    results.ShowWindow(SW_SHOW);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...