要想完全销毁一个对话框,就重载对话框的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函数中也要添加
}