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

来源:互联网 发布:如何化行最简形矩阵 编辑:程序博客网 时间:2024/06/02 04:46

在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:


图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


图2 Button1未被覆盖


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



0 0
原创粉丝点击