程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> MFC創立模態對話框和非模態對話框的辦法

MFC創立模態對話框和非模態對話框的辦法

編輯:關於C++

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;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved