MFC模態對話方塊和非模態對話方塊

來源:互聯網
上載者:User

         MFC中對話方塊有兩種形式,一個是模態對話方塊(model dialog box),一個是非模態對話方塊(modeless dialog box)。

 一、模態對話方塊(model dialog box)

        在程式啟動並執行過程中,若出現了模態對話方塊,那麼主視窗將無法發送訊息,直到模態對話方塊退出才可以發送。

       點擊模態對話方塊中的OK按鈕,模態對話方塊會被銷毀。

        建立一個模態對話方塊的代碼:

//建立一個模態對話方塊CTestDialog td;td.DoModal(); 

        其中CTestDialog為我自己所建立和一個對話方塊資源相關聯的對話方塊類。

        可以建立一個布局模態對話方塊類變數,不用擔心它會隨著所在函數返回而被銷毀。因為DoModal()函數的一個功能是,當前只能運行此模態對話方塊,且停止主視窗的運行,直到模態對話方塊退出,才允許主視窗運行。

        DoModal()函數也有顯示對話方塊的功能,所以也無需調用其他函數來顯示對話方塊。

二、非模態對話方塊(modaless dialog box)

        在程式啟動並執行過程中,若出現了非模態對話方塊,主視窗還可以發送訊息。

        點擊非模態對話方塊中的OK按鈕,非模態對話方塊沒有銷毀,只是隱藏了。若想點擊OK按鈕時,非模態對話方塊也銷毀,那麼CTestDialog類必須重載其基類CDialog的虛函數OnOK(),在此函數裡調用DestroyWindow()來銷毀此對話方塊。

        若和上面一樣的方式建立一個非模態對話方塊:

           CTestDialog td;td.Create(IDD_DIALOG1); //建立一個非模態對話方塊td.ShowWindow(SW_SHOWNORMAL); //顯示非模態對話方塊

        那麼,在運行時,你會發現此對話方塊無法顯示。這是因為你聲明的對話方塊變數td是局部變數,但這個函數返回時,td也被析構了,所以無法顯示此對話方塊。

        建立非模態對話方塊,必須聲明一個指向CTestDialog類的指標變數,且需要顯示的調用ShowWindow()才能將對話方塊顯示出來。有兩種建立方法:

(1)採用局部變數建立一個非模態對話方塊

//採用局部變數建立一個非模態對話方塊CTestDialog *pTD = new CTestDialog();pTD->Create(IDD_DIALOG1); //建立一個非模態對話方塊pTD->ShowWindow(SW_SHOWNORMAL); //顯示非模態對話方塊

       因為指標在聲明的時候是被放在堆棧中,只有整個應用程式關閉後才會被銷毀,所以可以正常顯示對話方塊。

        這種方法雖然不影響程式的運行,可是指標pTD所指向的記憶體卻導致不可用,這樣的編程很不好。

(2)採用成員變數建立一個非模態對話方塊

        首先在你所要編寫的類的標頭檔中聲明一個指標變數:

private:CTestDialog *pTD;

        然後再在相應的CPP檔案,在你要建立對話方塊的位置添加如下代碼:

//採用成員變數建立一個非模態對話方塊pTD = new CTestDialog(); //給指標分配記憶體pTD->Create(IDD_DIALOG1); //建立一個非模態對話方塊pTD->ShowWindow(SW_SHOWNORMAL); //顯示非模態對話方塊

        最後在所在類的解構函式中收回pTD所指向的記憶體:

delete pTD;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.