Windos编程实验指导书解析 下载本文

Class name 默认值为无,它提供C/C++语言编程时所需要的对话框类名,对MFC类库的资源文件来说,该项不被激活。

将添加对话框的General属性进行如下三点修改, 将对话框标识符改成IDD_DIALOG_FIRST; 将对话框标题改为“我的第一个对话框”;

单击[字体]按钮,通过弹出的字体对话框将对话框内的文本设置成“宋体,9” ,以使自己的对话框和Windows中的对话框保持外观上的一致。

在程序中使用对话框

(1) 在项目工作区窗口中选择ResourceView页面,双击资源“Menu”项中的IDR_MAINFRAME,则菜单编辑器窗口出现在主界面的右边,相应的Ex_SDI项目的菜单资源被显示出来,在菜单的最后一项,Visual C++为用户留出了一个空位置,用来输入新的菜单项,如图

(2) 在菜单的空位置上双击鼠标左键,则出现它的属性对话框,在标题框中输入“测试(&T)”,结果如图所示,其中符号&用来其后面的字符作为该菜单项的助记符,这样当按住“Alt”键不放,再敲击该助记符键时,对应的菜单项就会被选中,或在菜单打开时,直接按相应的助记符键,对应的菜单项也会被选中。

(3) 单击菜单属性对话框中的“保存可见”(Keep Visible)按钮,使此属性对话框一直可见,以方便操作。单击“测

试”菜单项下方的空位置,在属性对话框中,输入标题“对话框(&D)”,在ID框输入该菜单项的资源标识;_TEST_DLG,结果如图所示,单击属性对话框右上角的关闭按钮

(4) 用鼠标将新添加的菜单项拖到“查看”和“帮助”菜单项之间,结果如图所示。

(5) 选择“查看”?“建立类向导”菜单命令或直接按Ctrl+W快捷键,则出现MFC ClassWizard对话框,该对话框会自动切换到Message Maps页面。

(6) 从“Class name”组合框中选择CMainFrame,在Object Ids列表中选择ID_TEST_DLG,然后在Messages框中选择COMMAND消息。

(7) 单击[Add Function]按钮或双击COMMAND消息,出

现“Add Member Function”对话框以输入成员函数的名称。系统默认的函数名为OnTestDlg,如图所示。该函数是对菜单项ID_TEST_DLG的映射,也就是说,当在应用程序运行时,用户选择“对话框”,则该函数OnTestDlg被调用,执行函数中的代码。

(8) 单击[OK]按钮,在ClassWizard的“Member functions”列表中将列出新增加的成员函数。选择此函数,单

击[Edit Code]按钮(或直接在函数名双击鼠标),在此成员函数中添加下列代码:

void CMainFrame::OnTestDlg() {

CFirstDlg dlg; // 定义对话框类对象 dlg.DoModal(); // 显示对话框 }

代码中,DoModal是CDialog基类成员函数,它是用来显示和终止模式对话框。

(9) 在OnTestDlg函数的实现文件MainFrm.cpp的前面添加 CFirstDlg类的头文件包含,即:

#include \#include \#include \

(10) 编译并运行。在应用程序菜单上,选择“测试”? “对话框”菜单项,将出现如图的对话框,这个对话框就是刚才添加的对话框。

[程序3:Ex_Modeless] 创建并使用无模式对话框

(1) 用MFC AppWizard(exe)创建一个默认的单文档应用程 序x_Modeless。

(2) 在该项目中添加一个对话框资源,将其标识符设为IDD_DIALOG_SECOND,标题设为“无模式对话框”, (3) 对话框字体和大小设为“宋体,9号”。为IDD_DIALOG_SECOND对话框资源创建一个 对话框类CSecondDlg。

(4) 按Ctrl+W快捷键打开MFC ClassWizard,从“Class name”列表中选择CSecondDlg,在IDs列表中选择IDOK, 是对话框中[OK] 按钮的标识符,然后在Messages框中选择BN_CLICKED(单击按钮)消息,单击[Add Function]按钮或双击BN_CLICKED消息,出现“Add Member Function”对话框以输入成员函数的名称,保留系统默认的函数名为OnOK,如图所示。

(5) 修改CSecondDlg::OnOK函数中的代码。 void CSecondDlg::OnOK() {

// 添加其他代码使用户输入对话框的数据有效 DestroyWindow(); // 终止对话框显示 delete this; // 删除对话框,释放内存空间 }

代码中,DestroyWindow是对话框基类CWnd的一个成员函数,用来终止窗口。

(6) 添加[Cancel]按钮(标识符为IDCANCEL)的BN_CLICKED消息映射,并修改其映射函数CSecondDlg::OnCancel

的代码。

void CSecondDlg::OnCancel() // 单击[Cancel](取消)按钮

{

DestroyWindow(); delete this; }

(7) 在项目工作区窗口中选择ResourceView页面,双击资源“Menu”项中的IDR_MAINFRAME,打开菜单资源。 (8) 在菜单“查看”与“帮助”之间添加一个“测试(&T)”菜单,该菜单项的资源标识设为ID_TEST_DLG。

(9) 按Ctrl+W快捷键,打开MFC ClassWizard对话框,在Message Maps页面中从“Class name”列表中选择CMainFrame,在Object IDs列表中选择ID_TEST_DLG,然后在Messages框中选择COMMAND消息。

(10) 单击[Add Function]按钮或双击COMMAND消息,出现

“Add Member Function”对话框,取系统默认的函数名OnTestDlg,并在此成员函数中添加下列代码: void CMainFrame::OnTestDlg() {

CSecondDlg *pDlg = new CSecondDlg; // 使用new为对分配内存空间

pDlg->Create( IDD_DIALOG_SECOND );

// 创建对话框

pDlg->ShowWindow( SW_NORMAL ); // 显示对话框 }

代码中,Create可用来以一个对话框资源来创建对话框, ShowWindow是一个CWnd成员函数,用来显示对

话框, SW_NORMAL是用来指定将窗口显示成一般常用的状态。

(11) 在文件MainFrm.cpp前面添加CSecondDlg类的文件包含 #include \ #include \

(12) 编译并运行。在应用程序菜单上,多次选择“测试”? “对话框”菜单项,将会在同一个位置中出现多个

对话框,拖动这些对话框到适当位置,如图:

这就是无模式对话框的效果,从上述示例可以看出:模式和无模式对话框在用编辑器设计和使用MFC ClassWizard创建用户对话框类的方法是一致的,但在对话框的创建和退出的方式是不同的。

[程序4:通用对话框] MFC的通用对话框 对话框 用 途 CColorDialog CFileDialog CFindReplaceDialog CPageSetupDialog CFontDialog CPrintDialog 颜色对话框,允许用户选择或创建颜色 文件对话框,允许用户打开或保存一个文件 查找替换对话框,允许用户查找或替换指定字符串 页面设置对话框,允许用户设置页面参数 字体对话框,允许用户从列出的可用字体中选择一种字体 打印对话框,允许用户设置打印机的参数及打印文档 这些对话框都有一个共同特点:它们都从用户获取信息,但并不对信息作处理。

选定一个文件后,单击[打开]按钮,就会弹出一个消息对话框,显示该文件的全路径名称。 void CMainFrame::OnTestDlg() {

CString filter;

filter = “文本文件(*.txt)|*.txt|C++文件 (*.h,*.cpp)|*.h;*.cpp||\ CFileDialog dlg (TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); if (dlg.DoModal () == IDOK){ CString str; str = dlg.GetPathName(); AfxMessageBox(str); } }

GetPathName是CFileDialog类成员函数,用来获取文件的 全路径名。

通用文件对话框类CFileDialog的构造函数的原型如下:

CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,

DWORD dwFlags = OFN_HIDEREADONLY | OFN_O VERWRITEPROMPT,

LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

[程序5:]

写一个单文档,添加一个菜单,在菜单里打开一个模态对话框,通过该对话框输入一对坐标值,单击OK按钮,在视图中该坐标位置显示自己的姓名。

[程序6:]

用非模态对话框完成程序5的功能。

[程序7:]

写一个单文档,添加2个按钮到工具栏,第1个按钮实现打开文件对话框,选择文件并弹出消息框显示文件名称。第2个按钮实现打开颜色对话框选择颜色,并在视图区画出一个该颜色的矩形。