1. 程式人生 > >MFC初始化時隱藏對話方塊

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;

如果將i定義為1,則必須把視窗的Visible屬性去掉,也就是在視窗上右鍵點選屬性,選擇More Styles,將Visible前面的勾去掉。

    有了以上三步就可以實現對話方塊隱藏,但在程式啟動的時候,系統狀態列裡會有程式的圖示閃一下,這就需要再做一些工作:

    第一,在OnInitDialog()函式中新增ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);使對話方塊不在系統工作列中顯示。

    第二,在需要對話方塊顯示的程式中新增ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);

使對話方塊顯示在系統工作列中。