2013-08-23 85 views
4

可以通過向我介紹優秀的教程鏈接,幫助我獲得關於模態對話框與非模態對話框之間差異的全面知識嗎?
例如,你可以向我解釋有關鏈接here的程序嗎?他們是模態和非模態的?
我知道設計一個只使用代碼的對話框意味着沒有模式,但使用Toolbox設計對話框意味着模態,但是和我搜索一樣多,我變得更加困惑。你能幫我理解更多嗎?MFC中模態對話框與非模態對話框之間的區別

+0

爲簡單起見,「模型」對話框將佔用應用程序的最高窗口焦點,並且在此「模型」對話框關閉之前無法切換到其他窗體。無模式類似於浮動窗口。你使用的邊界根本不重要。 –

回答

10

模態對話框與非模態對話框之間的區別不僅限於MFC。

模態對話框處於打開狀態時,只要模態對話框打開,就不能與程序內部的此模態對話框進行任何其他操作。大多數對話框是模態的,例如文件另存爲對話框是模態的。

另一方面,一個無模對話框的行爲就像一個普通的窗口,你可以做任何你想要的,當它打開。 Microsoft Word中的拼寫檢查器對話框就是這種對話框的一個例子。

您在問題中提到的鏈接與模態和無模式對話無關。

模式對話框在MFC中很平常。

無模式對話框有點複雜,但是您可以在google上搜索「mfc modeless dialog tutorial」找到大量的教程。

+0

非常感謝@Michael Walz那麼我該如何理解一個對話框是一種模式還是非模式的對話,只需看到代碼並在運行程序之前? – sepideh

5

模式對話框通過調用MFC中的CDialog派生類的DoModal成員函數或使用API​​函數DialogBox來創建。

無模式對話框通過調用MFC中的CDialog派生類的Create()(或CreateIndirect)成員函數或使用CreateDialog API函數來創建。

上面的鏈接也解釋了你需要做什麼來支持模態和非模態對話框,對於MFC,this MSDN link有更多的信息。

0

模型對話框: 1.模型對話框,我們可以溝通單個窗口(即)所有者窗口.Incase,我們可以打開子窗口(子窗口),直到我們關閉那個窗口,那時我們在父窗口上通信 例如:保存,保存爲 2.創建模型DialogBox來調用domodel() 3.關閉時間你是通話結束dialog.this DialogBox不是刪除只是隱藏 4.在模型DialogBox那裏有一個子消息循環

Modelless DialogBox: 1.當我們可以同時打開一個窗口(所有者窗口)時,我們也可以傳遞子窗口。 Ex.In記事本的查找,文字,

2.型號對話框創作是調用創建窗口() 和的ShowWindow(3,如果你想關閉該窗口呼叫銷燬窗口 這裏窗口被銷燬 4) 。這裏的按摩亨德爾父窗口

0

模態對話框:

  • 打開模態對話框後,我們不能訪問父窗口EX:另存爲,OpenDialog箱。
  • 模態對話框通過調用Cdialog的構造函數和DoModel方法CDialog並在堆棧中創建。
  • 模態對話框通過調用EndDialog()函數關閉,它隱藏了對話框。
  • 它掛起父窗口消息循環,並啓動它自己的消息循環。

無模式對話框:

  • 打開無模式對話框後,我們可以訪問父窗口。
  • 無模式通過調用

    CDialog::Create(......); 
    CDialog::Show Window(.....) 
    

    方法創建的。並在堆中創建。

  • 通過調用Destroy Window()銷燬窗口關閉無模式對話框。
  • 它沒有自己的消息循環,它依賴於父窗口消息循環。父窗口將消息轉發給子窗口。