天天看点

无模式对话框的销毁&对话框给视图类发消息

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

}

继续阅读