1、第 8章 对话框初步和公用对话框的使用8.1对话框初步 对话框是对话框模板与对话框类 ( CDialog类) 的连接 对话框模板(资源)的设计1)选择菜单命令 “插入 ”“ 资源 ”,在打开的对话框中选择 “Dialog”,单击 “新建 ”按钮,打开对话框资源编辑器。2)把控件栏中的相关控件拖放到对话框模板中,就完成了对话框模板的设计。 对话框模板的设计注:对话框模板带有两个缺省按钮控件,一个是 “OK”(确定),一个是 “Cancel”(取消),其 ID分别为 IDOK和IDCANCEL。 对话框模板与对话框类的连接在头文件中从 CDialog类派生自己的对话框类CMyDialog,并在构造
2、器中与对话框模板连接:class CMyDialog:public CDialogpublic:enumIDD=IDD_DIALOG1;/通过枚举,把所有的对话框 ID命名为 IDDCMyDialog(CWnd*p=NULL):CDialog(CMyDialog:IDD,p)/构造器函数; 对话框的显示CMyDialog mydialog;mydialog.DoModal();/用 DoModal()函数显示对话框 。注: DoModal()函数负责对话框的显示,这个函数有两种可能的返回值,如果单击对话框上的 “确定 ”按钮关闭对话框, DoModal()函数的返回值是 IDOK;如果单击 “
3、取消 ”按钮关闭对话框, DoModal()函数的返回值是 IDCANCEL。 对话框的消息循环和按钮控件的消息1)对话框类是从 CWnd类派生的,因此具有消息循环和消息处理能力,它处理控件发给它的消息。2)单击 /双击按钮控件发出 WM_COMMAND消息,其消息映射是:ON_BN_CLICKED(按钮控件的 ID号,处理函数 Function) ON_BN_DOUBLECLICKED(按钮控件的 ID号,处理函数 Function) 对按钮控件消息映射的分析:WM_COMMANDON_WM_COMMAND()OnCommand(WPARAM wParam,LPARAM lParam)swi
4、tch(wParam)case IDC_BUTTON1:switch(lParam)case BN_CLICKED:处理方法; case BN_DOUBLECLICKED:处理方法; ON_BN_CLICKED(IDC_BUTTON1,Function1)3) CDialog基类已经为 “确定 ”和 “取消 ”按钮的单击行为编写了处理函数,其中 “确定”按钮的处理函数是 OnOK(), “取消 ”按钮的处理函数是 OnCancel(),在应用程序中这两条消息连消息映射都不用写。可以尝试把 “确定 ”按钮单击的消息映射补上,如下处理:( 1)加入消息映射BEGIN_MESSAGE_MAP(CMy
5、Dialog,CDialog)ON_BN_CLICKED(IDOK,OnOK)END_MESSAGE_MAP()( 2)声明 CMyDialog类具有消息处理能力,在 CMyDialog类定义的末尾加上宏 DECLARE_MESSAGE_MAP() 8.2 色彩对话框 Windows的公用对话框CDialogCCommonDialogCFileDialogCFontDialogCColorDialogCPrintDialogCPageSetupDialogCFindReplaceDialog 色彩对话框的使用1)色彩对话框的显示CColorDialog colordialog; /生成色彩对话框对象colordialog.DoModal(); /显示色彩对话框