190 likes | 382 Views
对话框. 对话框是一个弹出式窗口,是 Windows 应用程序的常见元素之一。 MFC 的 Cdialog 类封装了对话框功能; 对话框分为模态对话框和非模态对话框; 模态对话框是一个有系统菜单、标题栏、边框等界面元素的弹出式窗口。 调用模态对话框时,系统会自动禁止使用这个窗口和它所有的子窗口,直至该模态对话框关闭或销毁;如 Microsoft Word 中的 [ 打开 ] 对话框. 模态对话框的调用. CMyDlg dlg; dlg.DoModal();. 非模态对话框.
E N D
对话框 • 对话框是一个弹出式窗口,是Windows应用程序的常见元素之一。 • MFC的Cdialog类封装了对话框功能; • 对话框分为模态对话框和非模态对话框; • 模态对话框是一个有系统菜单、标题栏、边框等界面元素的弹出式窗口。 • 调用模态对话框时,系统会自动禁止使用这个窗口和它所有的子窗口,直至该模态对话框关闭或销毁;如Microsoft Word中的[打开]对话框
模态对话框的调用 CMyDlg dlg; dlg.DoModal();
非模态对话框 • 非模态对话框是一个有系统菜单、标题、边框的弹出式窗口,非模态对话框不会禁止使用其父窗口。如Microsoft Word的文档窗口、[查找]对话框。
非模态对话框的调用 CNoModalDlg *pDlg;//定义对话框指针 pDlg=new CNoModalDlg(this);//分配实例对象空间 pDlg->Create(IDD_NOMODALDLG); //创建非模态对话框 pDlg->ShowWindow(SW_SHOW); //显示非模态对话框
通用对话框 • Windows系统提供了一些通用对话框,如文件对话框、颜色对话框、字体对话框。 • MFC分别使用CFileDialog类、CColorDialog类、和CFontDialog类封装其功能。
通用对话框的使用步骤 • 声名对话框类型的变量; • 显示对话框之前,设置通用对话框的属性; • 调用DoModal函数,显示模态对话框; • 获得DoModal函数的返回值,判断用户是单击了“确定”或“取消”按钮; • 若用户单击了“确定”按钮,则得到用户使用对话框时所做的选择。
字体对话框 • 字体对话框用于为选定的文字设置字体; • 字体对话框的使用步骤如下: • 定义CFontDialog类型的变量; • 调用DoModal()函数,显示字体对话框; • 调用GetCurrentFont()函数,得到选种的字体信息,并以其构造Cfont类型的变量; • 将Cfont类型的字体选入当前绘图环境; • 应用该字体显示文字; • 恢复老字体;
颜色对话框 颜色对话框的使用步骤: • 定义CColorDialog类型的变量,并用构造函数对其进行初始化; • 调用Do Modal()函数,显示颜色对话框; • 调用CColorDialog::GetColor()函数,获得用户选择的颜色信息。
文件对话框 文件对话框的构造函数: CFileDialog::CFileDialog( )中参数lpszFilter用于指定可供选择的文件类型及相应的扩展名,格式如下: “Chart Files(*.xls)|*.xls|Worksheet Files(*.xls)|*.xls|All Files(*.*)|*.*||”
通用对话框编程举例 • 利用MFC AppWizard新建一个单文档应用程序,工程名为CommonDialog • 利用资源面版的菜单编辑器,在主菜单中添加一列“通用对话框”菜单,并添加三个菜单项,ID号分别为ID_FONT,ID_COLOR,ID_FILE,标题分别为“字体对话框”、“颜色对话框”、“文件对话框”
通用对话框编程举例 • 定义变量 • 在项目工作区窗口中,选择类面版中的视图类CCommonDialogView,单击右键,在弹出的菜单中选择“Add Member Variable”菜单项,为视图类添加两个成员变量:m_font和m_color,变量的类型分别为:LOGFONT和 COLORREF。
为视图类CCommonDialogView的以下成员函数添加代码为视图类CCommonDialogView的以下成员函数添加代码 CCommonDialogView::CCommonDialogView() { // TODO: add construction code here m_color=RGB(255,0,0); //初始化颜色变量 memset(&m_font,0,sizeof(m_font)); //将m_font所在内存空间清零 m_font.lfWeight=50; //设置字体宽度为50 m_font.lfHeight=50; //设置字体高度为50 strcpy(m_font.lfFaceName,"黑体"); //设置字体名 }
void CCommonDialogView::OnDraw(CDC* pDC) { CCommonDialogDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CString str="欢迎使用Visual C++6.0"; CRect rect; GetClientRect(rect); CFont newfont,*oldfont; newfont.CreateFontIndirect(&m_font); oldfont=pDC->SelectObject(&newfont); pDC->SetBkColor(RGB(128,128,128)); pDC->SetTextColor(m_color); pDC->TextOut(rect.right/4,rect.bottom/2,str); pDC->SelectObject(oldfont); }
编写菜单项消息处理函数,调用通用对话框 使用类向导:Class name选择CcommonDialogView,Object Ids选择ID—_FONT,Message选择COMMAND,代码如下: void CCommonDialogView::OnFont() { // TODO: Add your command handler code here CFontDialog font; //定义字体对话框变量 int i=font.DoModal();//调用字体对话框,并返回函数值 if(i==IDOK) //如果选用了OK按钮 { font.GetCurrentFont(&m_font); //得到选用的字体信息,存入m_font变量 Invalidate(); //使窗口重画 } }
颜色对话框代码如下: void CCommonDialogView::OnColor() { // TODO: Add your command handler code here CColorDialog color; //定义颜色对话框变量 int i=color.DoModal();//调用颜色对话框,并返回值 if(i==IDOK) //如果选择了OK {m_color=color.GetColor(); //得到选中的颜色,存入m_color变量 Invalidate(); //使窗口重画 } }
文件对话框代码如下: void CCommonDialogView::OnFile() { // TODO: Add your command handler code here CString filter,str; //定义字符串变量 filter="Worksheet Files(*.xls)|*.xls|All Files(*.*)|*.*||"; //定义过滤串 CFileDialog file(TRUE,NULL,NULL,OFN_OVERWRITEPROMPT,filter,NULL);//定义文件对话框 int i=file.DoModal();//调用文件对话框,并返回值 if(i==IDOK) //如果选择了OK按钮 { str=file.GetFileName(); //得到选中的文件名 MessageBox(str); //显示文件名 } }