C++ MFC:在运行时设置控件位置

C++ MFC:在运行时设置控件位置,c++,winapi,mfc,C++,Winapi,Mfc,我有一个带有按钮控件和activeX web浏览器控件的mfc对话框窗口。 现在,我正在将控件拖放到对话框窗口上,这样它们的位置就有点硬编码,而不是相对于对话框。 当对话框窗口打开时,我想在运行时设置它们的位置 我试着做了SetWindowPos(GetDlgItem(IDC_浏览器),0,0,a,b,1)但它什么也不做。 我还可以尝试什么?SetWindowPos就是您刚才使用了错误的参数。您指定的最后一个标志SWP_NOSIZE,但我认为这不是您想要的。试试这个: GetDlgItem(ID

我有一个带有按钮控件和activeX web浏览器控件的mfc对话框窗口。 现在,我正在将控件拖放到对话框窗口上,这样它们的位置就有点硬编码,而不是相对于对话框。 当对话框窗口打开时,我想在运行时设置它们的位置

我试着做了
SetWindowPos(GetDlgItem(IDC_浏览器),0,0,a,b,1)但它什么也不做。

我还可以尝试什么?

SetWindowPos就是您刚才使用了错误的参数。您指定的最后一个标志SWP_NOSIZE,但我认为这不是您想要的。试试这个:

GetDlgItem(IDC_EXPLORER)->SetWindowPos( NULL, 0, 0, a, b, SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW );
如果希望根据父控件动态调整控件大小。这是一个绝对的解决方案:


SetWindowPos就是您刚才使用错误参数的原因。您指定的最后一个标志SWP_NOSIZE,但我认为这不是您想要的。试试这个:

GetDlgItem(IDC_EXPLORER)->SetWindowPos( NULL, 0, 0, a, b, SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW );
如果希望根据父控件动态调整控件大小。这是一个绝对的解决方案:


您的问题不清楚您是否只想更改窗口的x-/y位置或z位置。我想你只想x-/y-移动它

您需要在要更改其位置的窗口上应用SetWindowPos。您没有通过窗口移动到SetWindowPos。请不要将1作为标志传递,请传递SWP定义

 GetDlgItem(IDC_EXPLORER)->SetWindowPos(&wndTop, 0, 0, a, b, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
或者更简单:

GetDlgItem(IDC_EXPLORER)->MoveWindow(0, 0, a, b);

您的问题不清楚您是只想更改窗口的x-/y位置还是同时更改z位置。我想你只想x-/y-移动它

您需要在要更改其位置的窗口上应用SetWindowPos。您没有通过窗口移动到SetWindowPos。请不要将1作为标志传递,请传递SWP定义

 GetDlgItem(IDC_EXPLORER)->SetWindowPos(&wndTop, 0, 0, a, b, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
或者更简单:

GetDlgItem(IDC_EXPLORER)->MoveWindow(0, 0, a, b);

如果您有很多控件,结合使用
BeginDeferWindowPos
EndDeferWindowPos
可以提高性能并减少闪烁

:


如果您有很多控件,结合使用
BeginDeferWindowPos
EndDeferWindowPos
可以提高性能并减少闪烁

: