模态对话框:
CModalDlg dlg;
dlg.DoModal();
非模态对话框:
CModalessDlg* pdlg;
pdlg =new CModalessDlg();
pdlg->Create(IDD_MODALESS);
pdlg->ShowWindow(SW_SHOW);
还需要调用:响应函数:
使用类向导响应类 CModalessDlg 的消息 WM_DESTROY,函数名称为
OnDestroy,
CDialog::OnDestroy();
//删除表示对话框的 C++对象
delete this;
创建方法不同。模态对话框一般通过声明对话框类对象,然后,直接调用 DoModal即可创建成功;而非模态对话框一般通过 Create 函数创建。
销毁方法不同。
1. 当模态对话框创建函数 DoModal 返回时,对话框自动销毁;而销毁非态对话框时则要人工干预,一般调用函数 DestroyWindow。
2.
对“确定”、“取消”按钮的响应不同。对于模态对话框,则直接重载基类的版本即可,并且要求在重载的版本中调用基类的实现;而对于非模态对话框,则不可以调用基类的实现,因为基类的版本将调用 EndDialog,而此函数只适用于模态对话框。
3
消息的处理途径不同。模态对话框有自己的消息循环,而非模态对话框的消息要经过应用的消息队列。如果想把这些消息传送给对话框窗口过程,则必须更改消息队列。
4
对于默认的对话框模板,其 Visible 属性默认为空,这不会对创建模态对话框产生任何影响,因为在消息循环中将会对此作出处理,从而创建完毕后即是可见的;而对于非模态对话框,就有所不同,如果没有选中 Visible 的话,则创建对话框后,必须调用 ShowWindow 以便确保对话框可见。
对话框数据交换和验证:
公用对话框类列表:
颜色对话框的使用:
CColorDialog color;
if(color.DoModal()==IDOK)
{
CMainFrame* pMainFrm =(CMainFrame*)AfxGetMainWnd();
pMainFrm->m_color =color.GetColor();
}
字体对话框的使用:
文件对话框的使用:
CFileDialog 类
OnFileNameOK 选择“打开(或保存)”时对文件的校验时调用
OnLBSelChangedNotify 文件列表框选择内容发生变化时调用
OnlnitDone 文件对话初始化完成时调用
OnFileNameChange 选择的文件发生变化时调用
OnFolderChange 选择的目录发生变化时调用
OnTypeChange 选择的文件类型发生变化时调用