MFC創立模態對話框和非模態對話框的辦法。本站提示廣大學習愛好者:(MFC創立模態對話框和非模態對話框的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MFC創立模態對話框和非模態對話框的辦法正文
在MFC中對話框有兩種情勢,一個是模態對話框(model dialog box),一個長短模態對話框(modeless dialog box)。本文對此分離簡述其創立辦法。
1、模態對話框(model dialog box)
在法式運轉的進程中,若湧現了模態對話框,那末主窗口將沒法發送新聞,直到模態對話框加入才可以發送。
點擊模態對話框中的OK按鈕,模態對話框會被燒毀。
創立一個模態對話框的代碼以下所示:
//創立一個模態對話框 CTestDialog td; td.DoModal();
個中CTestDialog為我本身所新建的和一個對話框資本相干聯的對話框類。
可以創立一個結構模態對話框類變量,不消擔憂它會跟著地點函數前往而被燒毀。由於DoModal()函數的一個功效是,以後只能運轉此模態對話框,且停滯主窗口的運轉,直到模態對話框加入,才許可主窗口運轉。
DoModal()函數也有顯示對話框的功效,所以也無需挪用其他函數來顯示對話框。
2、非模態對話框(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;