MFC編程入門之十二(對話框:非模態對話框的創建及顯示)


  上一節講了模態對話框及其彈出過程,本節接着講另一種對話框——非模態對話框的創建及顯示。

  非模態對話框顯示后,程序其他窗口仍然能正常運行,可以響應用戶輸入,還可以相互切換。上一講中創建的Tip模態對話框改為非模態對話框,讓大家看一下效果。

非模態對話框的對話框資源和對話框類

  實際上,模態對話框和非模態對話框在創建對話框資源和生成對話框類上是沒有區別的,所以上一講中創建的IDD_TIP_DIALOG對話框資源和CTipDlg類都不需要修改。

創建及顯示非模態對話框的步驟

  需要修改的是,對話框類實例的創建和顯示,也就是之前在CAdditionDlg::OnBnClickedAddButton()函數體中添加的對話框顯示代碼。下面是具體步驟:

  1、在AdditionDlg.h中包含CTipDlg頭文件並定義CTipDlg類型的指針成員變量。詳細操作方法是,在AdditionDlg.cpp中刪除之前添加的#include "TipDlg.h",而在AdditionDlg.h中添加#include "TipDlg.h",這是因為我們需要在CAdditionDlg.h中定義CTipDlg類型的指針變量,所以需要包含它的頭文件;然后在AdditionDlg.h中為CAdditionDlg類添加private成員變量CTipDlg *m_tipDlg。

  2、在CAdditionDlg類的構造函數中初始化成員變量m_tipDlg。如果cpp文件中函數太多,我們可以在Class View上半個視圖找到CAdditionDlg類,再在下半個視圖中找到其構造函數雙擊,中間客戶區域即可馬上切到構造函數的實現處。在構造函數體添加m_tipDlg = NULL;這是個好習慣,在任何指針變量使用前都需要初始化,可以避免因誤訪問重要內存地址而破壞地址的數據。

  3、將上一講中添加的模態對話框顯示代碼注釋或刪除掉,添加非模態對話框的創建和顯示代碼。VC++中注釋單行代碼使用“//”,注釋多行代碼可以在需要注釋的代碼開始處添加“/*”,結束處添加“*/”。修改后的CAdditionDlg::OnBnClickedAddButton()函數如下:

C++代碼:

 

 

  4、因為此非模態對話框實力是動態創建的,所以需要手動刪除此動態對象來銷毀對話框。我們在CAdditionDlg類的析構函數中添加刪除代碼,但是MFC並沒有自動給出析構函數,這時需要我們手動添加,在對話框析構時就會調用我們自定義的析構函數了。在AdditionDlg.h文件中為CAdditionDlg添加析構函數聲明:~CAdditionDlg();然后在AdditionDlg.cpp文件中添加析構函數的實現,函數體如下:

C++代碼:

  這樣,非模態對話框創建和顯示的代碼就添加修改完了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM