Visual c++ SetWindowPos()函数是否不移动窗口?

Visual c++ SetWindowPos()函数是否不移动窗口?,visual-c++,mfc,Visual C++,Mfc,我有一个对话框,我想放在另一个对话框中,并相对于主对话框上的一个控件进行定位 void CspAceDlg::DrawResultsArea() { CWnd* pTabCtl = GetDlgItem(IDC_BUILDTABS); CRect rectTabCtl; // Allocate CRect for control's position. pTabCtl->GetWindowRect(&rectTabCtl); int resX = r

我有一个对话框,我想放在另一个对话框中,并相对于主对话框上的一个控件进行定位

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()被忽略,我该如何解决这个问题?我应该使用不同的函数吗?

我自己解决了这个问题,主要是因为

我的代码如下所示:

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);
}

根据的文档,如果传入SWP_SHOWWINDOW,窗口将不会移动:

如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标志,则无法移动或调整窗口大小


对我来说,解决这个问题的方法是将程序的兼容性属性设置为“以管理员身份运行此程序”。

哇,这太奇怪了。。。谢谢我想知道为什么会这样被忽视。是的,乍一看很奇怪。但这意味着您可以使用SetWindowPos来处理其他一些标志,而不必担心它会实际移动(比如当您想要更改z顺序时)。现在不再这么说了。我想知道这意味着什么,如果有的话。很有趣——很高兴我当时真的复制了文本。欢迎来到堆栈溢出。在回答有公认答案的老问题之前(寻找绿色✓) 和其他答案一样,确保你的答案添加了新的内容,或者与之相关的其他方面有所帮助。以下是一个关于这些内容的指南。