2010-07-21 88 views
2

我用MFC的對話框,你做到哪裏之前:在DoModal之後隱藏MFC對話框時,其控件是否被銷燬?

EnterNameDlg dlg; 
dlg.DoModal(); 
string str = dlg.GetName(); 

但是一個對話框,我現在實際上看起來在這樣的方法的列表框控件,它不工作。雖然類實例在DoModal()之後顯然存在,但是實際的對話框是否會被破壞?我注意到調用DoModal()第二次導致OnInitDialog()也被再次調用,似乎支持這個理論,對話框是從模板重新創建而不是第二次可見。

回答

3

是的,DoModal會在每次調用時創建一個對話框並在返回之前銷燬該窗口。

只有數據成員仍然有效。當然,如果您想在對話生命期間收集數據,則可以在EnterNameDlg類中添加更多數據成員。
只要dlg超出範圍,所有內容都將被釋放。

2

在DoModal類實例仍然存在後,窗口及其所有控件都被銷燬。在DoModal之後,您只能調用不適用於對話框控件的函數。在對話框類的內部,當按下OK按鈕時,保持類成員(如CString)中的所需值。在關閉對話框後可以讀取這些成員。

1

MFC的整體構建圍繞一個尷尬的配對 - Windows窗口及其關聯的句柄和MFC類對象。 MFC類被設計爲在大多數情況下超過窗口。

相關問題