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