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顺序时)。现在不再这么说了。我想知道这意味着什么,如果有的话。很有趣——很高兴我当时真的复制了文本。欢迎来到堆栈溢出。在回答有公认答案的老问题之前(寻找绿色✓) 和其他答案一样,确保你的答案添加了新的内容,或者与之相关的其他方面有所帮助。以下是一个关于这些内容的指南。