在編寫MFC程序的時候,總是希望作為控制的面板頁面在我們的窗口界面以外,并且最好的是浮動的,這樣往往選用非模式的彈出式對話框。
m_pPropertyDlg = new CPropretyDlg;
m_pPropertyDlg->Create(IDD_DIALOG2);
不過新的問題出現(xiàn)了,點擊主窗口的時候,作為參考參數(shù)顯示的彈出式對話框就被遮擋在主窗體之后了,為了讓彈出式窗口始終顯示,我們讓他置頂。上圖中的【結(jié)構(gòu)視圖】和【控件屬性】兩個面板就是非模式彈出式對話框。
::SetWindowPos(m_pElementTree->m_hWnd,HWND_TOP,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);
這里有一個參數(shù)HWND_TOP,解釋是放在窗口隊列的最高位置,這個位置可選擇HWND_TOPMOST和HWND_TOP,在使用HWND_TOP無效果以后,選用了HWND_TOPMOST;這樣彈出式窗口就置頂了。本來事情到這里就結(jié)束了,不過還有一個問題隨后發(fā)生了。當我切換到其他程序的時候,彈出式的兩個非模式對話框依然是置頂?shù)?。這就讓我重新開始思考HWND_TOP和HWND_TOPMOST的區(qū)別,查了很多的資料都是這么解釋的:HWND_TOP是窗口隊列的置頂,HWND_TOPMOST是所有窗口的置頂;但是HWND_TOP為什么設(shè)定沒有效果呢?后來我才發(fā)現(xiàn)問題的所在,原來這兩個窗體要知道自己的父窗體。那么我們在創(chuàng)建這個對話框的時候就必須要告訴他父窗體才行:
m_pPropertyDlg = new CPropretyDlg;
m_pPropertyDlg->Create(IDD_DIALOG2,this);
這樣就完美了,看見沒有~~彈出的對話框只在你本程序的窗口序列中置頂了!!