2011-06-30 180 views
2

好的,我承認我對windows API甚至MFC沒有任何瞭解。MFC DoModal對話框

當事情變得毛茸茸(文件名字符串中的非法字符),我有一個錯誤窗口彈出,我想錯誤框是模態的。

對於我的生活,我無法弄清楚它爲什麼碰撞doModal時崩潰。

這裏是我認爲這可以修復的代碼。此代碼位於主窗口中按鈕的事件處理程序中。

CDialog *BadFileD = new CDialog(); 
BadFileD->Create(IDD_STATUS, this); 
BadFileD->DoModal(); 

我剛剛處於臨界狀態?

+2

而不是'CDialog * BadFileD = new CDialog();'您應該使用'CDialog BadFileD;'特別是在調用DoModal時。這很簡單,你完成後不必擔心刪除指針。 –

回答

5

對於顯示模式對話框,你應該使用的DoModal方法只

CDialog *BadFileD = new CDialog(IDD_STATUS, this); 
BadFileD->DoModal(); 

您可以從article

18

MFC對話框讀的話分二的模式,模式對話框和無模式對話框。

(1)模態對話框用法:

CDialog dlg; 
dlg.DoModal(); 

(2)無模式對話框的使用:

CMyDialog *pDlg = new CMyDialog(); 
pDlg->Create(ID_DLG, this); 
pDlg->ShowWindows(SW_SHOW); 

正如你所看到的,我們需要新的一個指針,但不能刪除。所以,你需要做到以下幾點我們CMyDialg類:

  1. 添加DestroyWindow()基法在OnOk()OnCancel()
  2. PostNcDestroy()方法中加上「delete this;」。

如果你不這樣做,你的代碼可能會導致內存泄漏。 BadFileD是一個類成員,並在析構函數中刪除。我建議使用Modeless對話框。

+0

這個答案是可以接受和糾正的解決方案 – AjayR