最近在程序的对话框调用中,只知道用.domodal来调用子对话框,但是当别人问我会不会模态和非模态时,就傻掉了,还有这个啊??呵呵,于是赶紧查了一下资料,总结了一下,与大家分享吧:
1) 模态和非模态区别
当显示一个模态对话框时,应用程序会暂停,即点击其他菜单或者别的不会执行,会出现警告的那种声音。直到关闭模态对话框,应用程序才会继续执行其他任务。
2) 模态对话框的显示和关闭
CDialog::DoModal和CDialog::EndDialog
程序示例 void CMyboleView::OnDiadlog()
{ // TODO: Add your command handler code here
CTestDlg dlg;
dlg.DoModal(); }
3) 非模态对话框的创建
CDialog::Create BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL ); 默认参数为NULL就是父窗口是框架类。
程序示例
void CMyboleView::OnDiadlog()
{ // TODO: Add your command handler code here
CTestDlg *p_ctd= new CTestDlg();//创建对话框的对像指针
p_ctd->Create(IDD_READING,this);//指针调用Create()函数,ID号为对话框的.
p_ctd->ShowWindow(SW_SHOWNA);//()中的参数可以用来改变对话框的显示模式(具体参见MSDN中ShowWindow()函数)}
4) 非模态对话框的销毁
//对话框中:
void CTestDlg::OnCancel()
{ DestroyWindow(); }
void CTestDlg::PostNcDestroy()
{ CDialog::PostNcDestroy();
delete this;}
如果要在点击按钮的情况下,销毁非模态对话框,只需要把按钮的事件映射到OnCancel函数即可。