MFC初始化時隱藏對話方塊
第一步,宣告一個響應函式afx_msg void OnNcPaint();用於阻止繪製對話方塊操作。將這個函式放入Dlg類的宣告中,作為Dlg類的一個成員。
第二步,註冊訊息WM_NCPAINT(),也就是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之間新增ON_WM_NCPAINT()。
第三步,OnNcPaint函式程式碼如下:
void CMyDialog::OnNcPaint()
{
static int i = 2;
if(i > 0)
{
i --;
ShowWindow(SW_HIDE);
}
else
CDialog::OnNcPaint();
}
OnNcPaint函式解釋:程式的需求是隻要視窗在初始執行時隱藏,所以定義static int i = 2;
變數可以判斷是否是首次顯示視窗。之所以定義為2,是因為當程式開始執行時,系統傳送(SendMessage)ON_WM_NCPAINT訊息,此時程式的視窗邊框應該被顯示,但是此時我們沒有作任何顯示的操作,而是將視窗隱藏,ShowWindow(SW_HIDE)將把視窗的WS_VISIBLE屬性去掉,繼續執行,程式將檢查WS_VISIBLE屬性,如果沒有則顯示視窗,所以又傳送了一個ON_WM_NCPAINT訊息。所以我們要處理兩次ON_WM_NCPAINT訊息。其次,也可以定義static
int i = 1;
有了以上三步就可以實現對話方塊隱藏,但在程式啟動的時候,系統狀態列裡會有程式的圖示閃一下,這就需要再做一些工作:
第一,在OnInitDialog()函式中新增ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);使對話方塊不在系統工作列中顯示。
第二,在需要對話方塊顯示的程式中新增ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);