VC MFC非模態對話框的完成辦法。本站提示廣大學習愛好者:(VC MFC非模態對話框的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是VC MFC非模態對話框的完成辦法正文
盡人皆知的,MFC中非模態對話框在顯示後,法式其他窗口仍能正常運轉,可以呼應用戶輸出,還可以互相切換。本文就來給年夜家講授一下非模態對話框的完成辦法:
1、非模態對話框的對話框資本和對話框類
現實上,模態對話框和非模態對話框在創立對話框資本和生成對話框類上是沒有差別的,是以,在創立模態對話框時所創立的IDD_TIP_DIALOG對話框資本和CTipDlg類都不須要修正。
2、創立及顯示非模態對話框的步調
須要修正的是,對話框類實例的創立和顯示,也就是之前在CAdditionDlg::OnBnClickedAddButton()函數體中添加的對話框顯示代碼。上面是詳細步調:
1. 在AdditionDlg.h中包括CTipDlg頭文件並界說CTipDlg類型的指針成員變量。具體操作辦法是,在AdditionDlg.cpp中 刪除之前添加的#include "TipDlg.h",而在AdditionDlg.h中添加#include "TipDlg.h",這是由於我們須要在AdditionDlg.h中界說CTipDlg類型的指針變量,所以要先包括它的頭文件;然後在 AdditionDlg.h中為CAdditionDlg類添加private成員變量CTipDlg *m_pTipDlg;。
2.在CAdditionDlg類的結構函數中初始化成員變量m_pTipDlg。假如cpp文件中函數太多,我們可以在Class View上半個視圖中找到CAdditionDlg類,再鄙人半個視圖中找到其結構函數雙擊,中央客戶區域便可立時切到結構函數的完成處。在結構函數體中 添加m_pTipDlg = NULL;,這是個好習氣,在任何指針變量應用前都初始化,可以免因誤拜訪主要內存地址而 損壞此地址的數據。
3.添加非模態對話框的創立和顯示代 碼。VC++中正文單行代碼應用“//”,正文多行代碼可以在需正文的代碼開端處添加“/*”,停止處添加“*/”。修正後的 CAdditionDlg::OnBnClickedAddButton()
函數以下:
void CAdditionDlg::OnBnClickedAddButton() { // TODO: Add your control notification handler code here /*INT_PTR nRes; // 用於保留DoModal函數的前往值 CTipDlg tipDlg; // 結構對話框類CTipDlg的實例 nRes = tipDlg.DoModal(); // 彈出對話框 if (IDCANCEL == nRes) // 斷定對話框加入後前往值能否為IDCANCEL,假如是則return,不然持續向下履行 return;*/ // 假如指針變量m_pTipDlg的值為NULL,則對話框還未創立,須要靜態創立 if (NULL == m_pTipDlg) { // 創立非模態對話框實例 m_pTipDlg = new CTipDlg(); m_pTipDlg->Create(IDD_TIP_DIALOG, this); } // 顯示非模態對話框 m_pTipDlg->ShowWindow(SW_SHOW); // 將各控件中的數據保留到響應的變量 UpdateData(TRUE); // 將被加數和加數的加和賦值給m_editSum m_editSum = m_editSummand + m_editAddend; // 依據各變量的值更新響應的控件。和的編纂框會顯示m_editSum的值 UpdateData(FALSE); }
4.由於此非模態對話框實例是靜態創立的,所以須要手動刪除此靜態對象來燒毀對話框。我們在 CAdditionDlg類的析構函數中添加刪除代碼,然則MFC並沒有主動給出析構函數,這時候須要我們手動添加,在對話框對象析構時就會挪用我們自界說 的析構函數了。在AdditionDlg.h文件中為CAdditionDlg添加析構函數聲明:~CAdditionDlg();,然後在 AdditionDlg.cpp文件中添加析構函數的完成,函數體以下:
CAdditionDlg::~CAdditionDlg() { // 假如非模態對話框曾經創立則刪除它 if (NULL != m_pTipDlg) { // 刪除非模態對話框對象 delete m_pTipDlg; } }
如許,非模態對話框創立和顯示的代碼就添加修正完了。
這只是一個簡略的例子,到這裡信任年夜家關於對話框的應用更上了一個台階了,可以在分歧的情形下可以選擇應用模態對話框和非模態對話框了。