实验五 标准控件
[程序1:Ex_DlgCtrls] 用控件的编程方式来创建一个按钮
(1) 选择“文件”?“新建”菜单,在弹出的“新建”对话框中单击“工程”标签,选择MFCAppWizard(exe)的项目类型,在工程框中输入项目名Ex_DlgCtrls
(2) 单击[确定]按钮,在出现的“Step 1”对话框中选择“基本对话框)”应用程序类型,单击[完成]按钮,创建一个
默认的基于对话框的应用程序项目。
(3) 将项目工作区切换到ClassView页面,展开CEx_DlgCtrlsDlg类,右击CEx_DlgCtrlsDlg类名,弹出如图所示
的快捷菜单。
(4) 从快捷菜单中选择Add Member Variable,出现如图所示的对话框,在Variable Type(变量类型)编辑框中输
入CButto n(MFC按钮类),在Variable Name(变量名) 编辑框中输入要定义的CButton类对象名m_btnWnd。
(5) 单击[OK]按钮,这样Visual C++就会自动在CEx_DlgCtrlsDlg
类中添加该成员变量。
在项目工作区的ClassView页面中,双击OnInitDialog函数名,在该函数中添加下列代码: BOOL CEx_DlgCtrlsDlg::OnInitDialog() { CDialog::OnInitDialog();
… m_btnWnd.Create(\你好\ BS_PUSHBUTTON, CRect(20, 20, 120, 60), this, 201); // 创建 CFont *font = this->GetFont(); // 获取对话框的字体 m_btnWnd.SetFont(font); // 设置控件字体 return TRUE; // return TRUE unless you set the focus to a control }
(6) 编译并运行,结果如图所示
上述是通过编程方式实现控件的,但比较繁琐和复杂,一般是通过对话框模板中用编辑器指定控件。
[程序2:映射控件消息]
1. 在MFC中,映射一个控件消息是非常简便的,如下面的过程是对新添加的按钮控件映射BN_CLICKED(单击)消息。将项目工作区窗口切换到ResourseView页面,双击Dialog资源下的标识IDD_EX_DLGCTRLS_DIALOG,打开该对话框资源模板。删除“TODO: 在这里设置对话控制。”控件,添加一个按钮控件,保留其默认属性。如图所示。
2 按快捷键Ctrl+W,打开MFC ClassWizard对话框,查看“Class name”列表中是否选择了CEx_DlgCtrlsDlg,在IDs列表中选择IDC_BUTTON1,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在Messages框中选择BN_CLICKED消息。
3 单击[Add Function]按钮或双击BN_CLICKED消息,出现“Add Member Function”对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1。
4 单击[OK]按钮,在MFC ClassWizard的“Member functions”列表中将列出新增加的成员函数。 在此成员函数中添加下列代码: void CEx_DlgCtrlsDlg::OnButton1() { MessageBox(\你按下了\\\按钮!\} 5.
编译并运行,当单击[Button1]按钮时,就会执行OnButton1函数,弹出一个消息对话框。这就是按钮BN_CLICKED消息的映射过程,其他控件的消息也可以类似操作。
[程序3:]
写一个单文档程序,用菜单命令打开一个对话框,通过该对话框中的红色,绿色,蓝色单选按钮选择颜色,在视图中绘制不同颜色的矩形。
[程序4:]
写一个单文档程序,添加一个工具栏按钮。单击该按钮弹出一个对话框,通过该对话框中的红色,绿色,蓝色复选框选额颜色,在视图中输出一行文本。
[程序5:]
写一个对话框程序,根据用户从列表框中选择的线条样式,在对话框中绘制一个矩形。线条样式有水平线,垂直线,向下斜线,十字线等四种画刷。
[程序6:]
用组合框取代列表框,实现程序5一样的功能。
实验六 文档与视图
[程序1:] 文档数据和视图显示。
编写单文档程序,为文档对象添加数据成员recno(int类型),表示学号,stuname(CString类型)表示姓名,并在视图中输出文档对象中的内容。要求当按向上箭头或按向下箭头时,学号每次递增1或递减1,能在视图中反映学号变化。
(1)首先建立一个单文档程序。
(2)在文档类添加类的成员变量。 头文件: public: int recno; CString stuname;
并在实现文件里构造函数中初始化: CDemo1Doc::CDemo1Doc()
{ }
// TODO: add one-time construction code here recno=1;
stuname=\张三\