**自:
將窗體置頂的方法有:
//將窗體置頂的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_nosize);
說明:&cwnd::wndtopmost 是當前的最頂層視窗,呼叫函式,會把m_hwndtop或pdlg 置於&cwnd::wndtopmost上面
自然就變成了最頂層
&cwnd::wndtopmost 是個靜態成員變數 不知是本主程式的還是整個windows系統的?
所有對話方塊建立時,由系統自動更新的乙個變數
我用(&cwnd::wndtopmost )->getsafehwnd(),能取到個有效的控制代碼,但呼叫setwindowpos()卻無效。
用::getforegroundwindow()可以。
getforegroundwindow() 所取到的一定是當前頂層的 但要注意 若你在介面程式裡,比如按鈕觸發後呼叫他,獲取
到的將是你正操作的介面。
如下**:
void ctesttimerdlg::onbnclickedbutton1()
void ctesttimerdlg::onbnclickedbutton2()
更關鍵的一點,同乙個主程式裡的兩個子視窗都設定了 topmost 則相互不起作用,即兩個子對話方塊都可以通過獲得焦點
而置頂。但二個子對話方塊 對於其他程式可以一起置頂。
引數 型別及說明
hwnd hwnd,欲定位的視窗控制代碼
hwndinsertafter hwnd,置於hwnd前面的視窗控制代碼。這個引數必須是視窗的控制代碼或是下面的值之一: hwnd_bottom 將視窗置於其它所有視窗的底部
hwnd_notopmost 將視窗置於其它所有視窗的頂部,並位於任何最頂部視窗的後面。如果這個視窗非頂部視窗,這個標記對該視窗並不產生影響
hwnd_top 將視窗置於它所有視窗的頂部
hwnd_topmost 將視窗置於其它所有視窗的頂部,並位於任何最頂部視窗的前面。即使這個視窗不是活動視窗,也維持最頂部狀態
wflags:
uint,指定視窗狀態和位置的標記。這個引數使用下面值的組合: swp_drawframe 圍繞視窗畫乙個框
swp_framechanged 傳送一條wm_nccalcsize訊息進入視窗,即使視窗的大小沒有發生改變。如果不指定這個引數,訊息wm_nccalcsize只有在視窗大小發生改變時才傳送
swp_hidewindow 隱藏視窗
swp_noactivate 不啟用視窗
swp_nocopybits 遮蔽客戶區域
swp_nomove 保持當前位置(x和y引數將被忽略)
swp_noownerzorder 不改變所有視窗的位置和排列順序
swp_noredraw 視窗不自動重畫
swp_noreposition 與swp_noownerzorder標記相同
swp_nosendchanging 防止這個視窗接受wm_windowposchanging訊息
swp_nosize 保持當前大小(cx和cy會被忽略)
swp_nozorder 保持視窗在列表的當前位置(hwndinsertafter將被忽略)
swp_showwindow 顯示視窗
VC 視窗置頂(置於桌面所有程式之上)
要做乙個軟體制裁密碼驗證,需要把窗體置於其他桌面程式之上,但總是置於其他彈出框之下,會造成使用者忽略了導致使用者不明什麼原因。後來查到了csnd的乙個帖子 試了以下方法便成功了,現把方法公布於下 在窗體的初始化函式oninitdialog 中新增以下一句 setwindowpos this m hw...
VC 6 0定製視窗的方法
一 如何在多文件介面下去掉開始的子視窗 在多文件介面下,自動生成乙個新的子視窗,而乙個實際的應用系統往往是由使用者操作後再生成新的視窗。為了去掉開始的子視窗,可在應用程式檔案分析命令列的語句 ccommandlineinfo cmdinfo parsecommandline cmdinfo 後加入 ...
VC程式設計,使子視窗在父視窗居中的方法
如果要讓視窗內的乙個控制項在父視窗的客戶區居中,或在某一位置,可以用setwindowpos,注意裡面的第三個和第四個引數是相對于父視窗的客戶區的座標的,父視窗的客戶區的座標的左上角left,top都是0 如果在父視窗裡彈出乙個dialogbox子視窗,這時你可能希望這個dialogbox在父視窗的...