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:


图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序向后增加。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值