VC關於置頂視窗的方法小結

2022-02-17 02:45:12 字數 1738 閱讀 8129

**自:

將窗體置頂的方法有:

//將窗體置頂的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在父視窗的...