MFC中使用SetWindowPos GroupBox遮盖内部控件问题解决办法

在MFC中,需要调整控件位置时可以使用SetWindowPos函数进行操作。对在GroupBox中的控件进行操作时需要先对控件的位置进行设置,再对GroupBox进行设置。否则会导致GroupBox遮挡控件。

例如:

::SetWindowPos(GetDlgItem(IDC_MAIN_PANEL)->GetSafeHwnd(), NULL, 0, 0, 100, 60, SWP_SHOWWINDOW);//Groupbox

::SetWindowPos(GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(), NULL, 0, 0, 60, 30, SWP_SHOWWINDOW);//按钮1
::SetWindowPos(GetDlgItem(IDC_BUTTON2)->GetSafeHwnd(), NULL, 0, 50, 60, 30, SWP_SHOWWINDOW);//按钮2

以上代码会导致Groupbox覆盖按钮显示。显示效果如图1:

MFC中使用SetWindowPos GroupBox遮盖内部控件问题解决办法_第1张图片

图1  Button1被覆盖


以下代码可以正常显示,显示效果如图2。

::SetWindowPos(GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(), NULL, 0, 0, 60, 30, SWP_SHOWWINDOW);//按钮1
::SetWindowPos(GetDlgItem(IDC_BUTTON2)->GetSafeHwnd(), NULL, 0, 50, 60, 30, SWP_SHOWWINDOW);//按钮2
::SetWindowPos(GetDlgItem(IDC_MAIN_PANEL)->GetSafeHwnd(), NULL, 0, 0, 100, 60, SWP_SHOWWINDOW);//Groupbox

MFC中使用SetWindowPos GroupBox遮盖内部控件问题解决办法_第2张图片

图2 Button1未被覆盖


原理猜测:Windows在绘制控件时先绘制的控件置于Z序的最顶层,后绘制的控件Z序向后增加。



你可能感兴趣的:(Windows程序设计)