要想完全銷燬一個對話框,就重載對話框的OnOk和OnCancel函數,然後在這兩個函數裏面調用DestroyWindow,如果你是使用new分配的內存,可以重載PostNcDestroy函數,然後在PostNcDestroy函數裏面調用delete this
在默認的情況下,非模態對話框是不會自己調用DestroyWindow來銷燬窗口,只是把它隱藏了,你可以在關閉一個非模態對話框後用IsWindow函數來判斷這個對話框是否被銷燬。
還有,不管對話框裏面有沒有OK和Cancel按鈕,當你按esc,cancel鍵,系統菜單的關閉時,都會調用OnCancel.而當你點OK鍵,回車鍵時,都會調用OnOK
下面的例子是在OnOk中銷燬對話框。
void Alpha::OnOK()
{//如果點擊OK則向view類發消息
// TODO: Add extra validation here
CMotionView* pView = NULL;
pView = ((CMotionView*)((CMainFrame *)AfxGetMainWnd())->GetActiveView());
//在對話框中得到指向視圖的指針
if(pView != NULL)
{
pView->SendMessage(WM_USERDEFMSG,0,0);//給視圖類發消息
}
CDialog::OnOK();
this->DestroyWindow();//銷燬對話框,要放到最後面
//OnCancel函數中也要添加
}