VC/MFC 控件置顶 窗体内控件置顶

窗体内指定某个控件置顶,使用SetWindowPos函数。但不能这样用    ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); 这是窗体在桌面置顶

 

控件置顶(id: IDC_X1)   IDC_Y是窗体上ID最大的控件。 IDC_X1 放在 IDC_Y(insertAfter)后面  IDC_X1变成置顶效果。

GetDlgItem(IDC_X1)->SetWindowPos(GetDlgItem(IDC_Y), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

 

需要注意后续置顶IDC_X2时,Z序(Y,X1,X2)

GetDlgItem(IDC_X2)->SetWindowPos(GetDlgItem(IDC_X1), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

 

如果insertAfter依旧设为IDC_Y,会导致IDC_X2非置顶(IDC_X2显示在IDC_X1下面)  Z序(Y,X2,X1)

/*设置窗口置顶   控件按照Z序(从小到大) 逐个渲染   Z值大的, 最后渲染 显示在最前面(置顶)
    A->SetWindowPos B(insertAfter)   效果就是A放在B后面   Z序(BA)   A显示在B上面
    首次设置X  放在置顶控件后面,X变成置顶
    后续设置Y  放在置顶控件(X)后面,Y变成置顶
    如果控件 已经置顶 则不需要操作
*/
if (m_DragData.LastWidgetId == -1)
    GetDlgItem(m_DragData.WidgetId)->SetWindowPos(
                GetDlgItem(IDC_Pic50), 
                0, 0, 0, 0, 
                SWP_NOMOVE | SWP_NOSIZE);
else if (m_DragData.LastWidgetId !=m_DragData.WidgetId)
    GetDlgItem(m_DragData.WidgetId)->SetWindowPos(
                GetDlgItem(m_DragData.LastWidgetId), 
                0, 0, 0, 0, 
                SWP_NOMOVE | SWP_NOSIZE);

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值