
在編寫MFC程式的時候,總是希望作為控制的面闆頁面在我們的視窗界面以外,并且最好的是浮動的,這樣往往選用非模式的彈出式對話框。
m_pPropertyDlg = new CPropretyDlg;
m_pPropertyDlg->Create(IDD_DIALOG2);
不過新的問題出現了,點選主視窗的時候,作為參考參數顯示的彈出式對話框就被遮擋在主窗體之後了,為了讓彈出式視窗始終顯示,我們讓他置頂。
::SetWindowPos(m_pElementTree->m_hWnd,HWND_TOP,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);
這裡有一個參數HWND_TOP,解釋是放在視窗隊列的最高位置,這個位置可選擇HWND_TOPMOST和HWND_TOP,在使用HWND_TOP無效果以後,選用了HWND_TOPMOST;這樣彈出式視窗就置頂了。本來事情到這裡就結束了,不過還有一個問題随後發生了。當我切換到其他程式的時候,彈出式的兩個非模式對話框依然是置頂的。這就讓我重新開始思考HWND_TOP和HWND_TOPMOST的差別,查了很多的資料都是這麼解釋的:HWND_TOP是視窗隊列的置頂,HWND_TOPMOST是所有視窗的置頂;但是HWND_TOP為什麼設定沒有效果呢?後來我才發現問題的所在,原來這兩個窗體要知道自己的父窗體。那麼我們在建立這個對話框的時候就必須要告訴他父窗體才行:
m_pPropertyDlg = new CPropretyDlg;
m_pPropertyDlg->Create(IDD_DIALOG2,this);
這樣就完美了,看見沒有~~彈出的對話框隻在你本程式的視窗序列中置頂了!!