VC MFC 控制項置頂 窗體內控制項置頂

2021-09-29 10:37:49 字數 1153 閱讀 3672

窗體內指定某個控制項置頂,使用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);

VB窗體置頂

private declare function setwindowpos lib user32 alias setwindowpos byval hwnd as long,byval hwndinsertafter as long,byval x as long,byval y as long,b...

WPF 窗體置頂

1 設定窗體topmost屬性 private dispatchertimer timer public window1 void window1 loaded object sender,routedeventargs e private void timer1 tick object sende...

windows將窗體置頂的方法總結

將窗體置頂的方法有 將窗體置頂的api函式 setwindowpos m hwndtop,hwnd topmost,0,0,0,0,swp nomove swp nosize mfc pdlg setwindowpos cwnd wndtopmost,0,0,0,0,swp nomove swp n...