




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章对话框与常用控件 掌握Button EditBox和StaticText控件的创建和使用方法掌握基于对话框的应用程序的编程技术掌握模式对话框 非模式对话框和通用对话框的设计与调用 教学目标 VisualC 程序设计 电子教案 王明福编 教学内容 MyCalculator程序演示开发MyCalculator程序口令对话框通用对话框常用控件介绍 4 1MyCalculator程序 返回目录 程序运行结果 程序运行演示 4 2开发MyCalculator程序 4 2 1创建工程4 2 2可视化设计4 2 3为编辑框IDC DISPLAY引入变量4 2 4为CMyCalculatorDlg类添加数据成员4 2 5为BUTTON按钮的BN CLICKED事件添加响应函数4 2 6编写程序代码4 2 7技术要点4 2 8程序优化 返回目录 4 2 1创建工程 返回 创建MyCalculator工程的步骤 1 启动VisualC 6 0 从 File 菜单中选择 New 2 在New对话框中选择 Project 标签 然后指定工程类型MFCAppWizard exe 工程名MyCalculator和工程位置D MyVC 3 点击 OK 按钮 弹出MFCAppWizard Step1对话框 选择 Dialogbased 单选按钮 创建一个基于对话框的应用程序 4 单击 Finish 按钮 此时Visualc 6 0将显示NewProjectInformation窗口 5 单击 OK 按钮 于是 VisualC 6 0就会创建MyCalculator工程以及相关的所有文件 4 2 2可视化设计 可视化设计 就用VC 自带的工具软件Winzards 制作计算器程序界面 即添加计算器中的数字 运算符等按钮和数字显示编辑框 控件的两个要素 ID标识符和Caption文本 返回 4 2 3为编辑框IDC DISPLAY引入变量 为了能够在程序运行过程中 将输入的数据和计算的结果在编辑框上显示 必须为它引入一个变量 从而能够使编辑框以变量的形式出现在程序中 利用函数UpdateData true 或UpdateData false 就可达到目的 在MFCClassWizard对话框中 选择 MemberVariable 标签为IDC DISPLAY编辑框引入变量 CStringm display 返回 4 2 4为CMyCalculatorDlg类添加数据成员 为了实现计算器功能 我们需要向CMyCalculatorDlg类 即MyCalculatorDlg h文件中 添加变量 变量属性和用途如下表 返回 4 2 5为Button按钮的BN CLICKED事件添加响应函数 用MFCClassWizard为对话框IDD MYCALCULATOR DIALOG中的所有Button按钮的BN CLICKED事件添加处理函数 如表4 3所示 返回 4 2 6编写程序代码 1 为数字 N 按钮的消息响应函数添加代码 算法设计如下 1 作为整数输入数字N时 N 0 9 m second m second 10 N 2 作为小数输入数字N时 N 0 9 m second m second N m coff m coff 0 1 voidCMyCalculatorDlg OnButton8 if m coff 1 0 作为整数输入m second m second 10 8 else 作为小数输入 m second m second 8 m coff m coff 0 1 UpdateDisplay m second 更新编辑框的数据显示 完全类似 请读者为其它数字按钮的消息响应函数添加代码 返回 2 为运算符 按钮的消息响应函数添加代码 算法描述 1 m first与m second作m operator运算后 m first 2 0 m second 3 m first m display 显示 4 用当前点击的运算符 m operator 5 将小数的权值变量m coff置1 0复位 以点击 运算符为例 在消息响应函数中编写如下代码 voidCMyCalculatorDlg OnButtonAdd Calculate m operator voidCMyCalculatorDlg Calculate void switch m operator GetAt 0 case m first m second break case m first m second break case m first m second break case if fabs m second 0 000001 m display 除数不能为零 UpdateData false return m first m second break m second 0 0 m coff 1 0 UpdateDisplay m first 更新编辑框的显示内容 voidCMyCalculatorDlg UpdateDisplay doublelVal m display Format T f lVal inti m display GetLength 格式化输出 将输出结果后的零全部截去while m display GetAt i 1 0 m display Delete i 1 1 i UpdateData false 更新显示编辑框变量m display 其它运算类似 留给读者自已完成 3 为等号 按钮消息响应函数添加代码 算法设计 1 m first与m second作m operator运算后 m first 2 m first m display 显示 3 0 m second 4 0 m first 5 将小数的权值变量m coff置1 0 6 输入的运算符 m operator voidCMyCalculatorDlg OnButtonEqual Calculate m first 0 0 m operator 4 在OnButtonSqrt 函数中 编写代码 voidCMyCalculatorDlg OnButtonSqrt m second sqrt m second UpdateDisplay m second 5 为 C 和 1 X 按钮的消息响应函数编写代码 voidCMyCalculatorDlg OnButtonClear m first 0 0 m second 0 0 m operator m coff 1 0 UpdateDisplay 0 0 voidCMyCalculatorDlg OnButtonReciprocal if fabs m second 0 000001 m display 除数不能为零 UpdateData false return m second 1 0 m second UpdateDisplay m second 6 为 按钮的消息响应函数编写代码 按钮的消息响应函数voidCMyCalculatorDlg OnButtonPoint m coff 0 1 按钮的消息响应函数voidCMyCalculatorDlg OnButtonSign m second m second UpdateDisplay m second 返回 4 2 7技术要点 UpdateData函数 UpdateData函数是CDialog的基类CWnd的成员函数 函数原型如下 BOOLUpdateData BOOLbSaveAndValidate TRUE 一般在对话框的派生类中 利用UpdateData函数进行控件和相应变量之间的数据传递 形式如下 UpdateData TRUE 将控件中的数据传递给相应的变量UpdateData FALSE 将变量中的数据传递给相应的控件 即显示 返回 4 2 7技术要点 关于消息响应函数 用MFCClassWizard为对话框中某按钮的BN CLICKED事件添加消息处理函数时 MFCClassWizard为我们做了三件事 1 在类的定义MyCalculatorDlg h文件中 添加了消息响应函数的函数原型 2 在类的实现文件MyCalculatorDlg cpp中 添加了函数体 3 在类的实现文件MyCalculatorDlg cpp中 添加了消息映射 所以 如果想删除通过ClassWizard创建的消息响应函数 在MFCClassWizard对话框中 选中要删除的函数 单击 Deletefunction 按钮将函数删除 但是源文件中相应的函数体并没有删除 需要手工方法将函数体删除 4 2 7技术要点 字符串CString类 CString类的对象由一个长度可变的字符序列组成 包含很多成员函数用来操作字符串 可以很方便地实现对字符串的各种操作 CString类中的字符是TCHAR类型的 1 构造函数CString 产生一个空的CString对象CString constCString 从一个ANSI字符串初始化对象 返回 4 2 8优化MyCalculator程序 ON COMMAND RANGE使用一个消息处理函数来处理对某个ID范围内所有控件的命令响应 该宏的原型为 ON COMMAND RANGE ID1 ID2 memberFxn 其中ID1是控件ID的起始值 ID2是控件ID的结束值 memberFxn为消息响应函数 用OnOperandInput处理数字按钮 0 9 的消息响应函数的方法是 1 手工添加函数声明 也就是在MyCalculatorDlg h中 AFX MSG CMyCalculatorDlg 与 AFX MSG 之间 添加下面的语句 afx msgvoidOnOperandInput UINTnID 2 在MyCalculatorDlg cpp文件中 AFX MSG MAP CMyCalculatorDlg 与 AFX MSG MAP 之间 加入下面语句 ON COMMAND RANGE IDC BUTTON0 IDC BUTTON9 OnOperandInput 返回 4 3口令对话框 4 3 1预备知识4 3 2编辑口令对话框资源4 3 3创建口令对话框类4 3 4为口令编辑框引入变量4 3 5调用口令对话框4 3 6显示非模式对话框 返回目录 模式对话框与非模式对话框 返回 所谓模式对话框 是指打开后直至关闭均不可在应用程序其它位置工作的对话框 比较典型的模式对话框有 打开 保存 等对话框 所谓非模式对话框 是指打开仍可切换到应用程序其它位置工作的对话框 比较典型的非模式对话框的一个例子DeveloperStudio的查找和替换对话框 设计和使用对话框的方法如下 1 创建对话框资源 并添加各种所需的控件 2 创建对话框类 CDialog 的派生类 并将其与已创建的对话框资源相连接 3 在创建的派生类中添加所需的数据成员变量 数据交换函数 DDX 和数据验证函数 DDV 4 为对话框中各控件添加所需的消息响应函数 并编写程序代码 5 为对话框的调用者添加对话框的调用 对话框的设计方法 返回 假设被调用对话框资源的ID为 IDD PASSWORD DIALOG 创建的对话框类名为 CPasswordDialog 则 1 调用模态对话框CPasswordDialogm Dlg 声明CPasswordDialog类的一个对象m Dlgm Dlg DoModal 显示模态对话框 2 调用非模态对话框1 在视图类的头文件中添加CPasswordDialog的指针变量 CPasswordDialog m Dlg 2 在视图类的构造函数中将其初始化 m Dlg NULL 3 在调用函数中添加如下代码调用if m Dlg NULL m Dlg newCPasswordDialog m Dlg Create IDD PASSWORD DIALOG this m Dlg ShowWindow SW SHOW 显示非模态对话框 对话框的调用 返回 4 3 2编辑口令对话框资源 1 创建对话框资源参照第2章中2 3 2节的方法 在MyHello工程中 新建一个ID 标识符 为 IDD PASSWORD DIALOG Caption为 口令 的对话框资源2 编辑对话框资源 返回 4 3 3创建口令对话框类 返回 为IDD PASSWORD DIALOG对话框创建一个新类 操作步骤如下 1 在IDD PASSWORD DIALOG对话框资源上单击鼠标右键 在弹出的快捷菜单中选择ClassWizard 或双击对话框 或通过菜单View ClassWizard 弹出MFCClassWizard对话框 在MFCClassWizard对话框弹出后紧接着弹出AddingClass对话框 2 在AddingClass对话框中确认墨认选择Createanewclass 单击 OK 按钮 弹出NewClass对话框 3 在Name编辑框中输入新建类名CPasswordDialog 其它取墨认值 4 3 4为口令编辑框引入变量 返回 为IDC PASSWORD EDIT编辑框引入变量的步骤如下 1 在View菜单中选择ClassWizard菜单项 2 在MFCClassWizard对话框中 选择 MemberVariable 标签 作如下选择 Classname CPasswordDialogControlIDs IDC PASSWORD EDIT 3 单击 AddVariable 按钮 此时 VisualC 6 0将显示一个AddMemberVariable对话框 设置如下 Variablename m passwordCategory ValueVariabletype Cstring 4 单击AddMemberVariable对话框的 OK 按钮 返回到MFCClassWizard对话框 再单击MFCClassWizard对话框的 OK 按钮 于是 VisualC 6 0就为编辑框IDC PASSWORD EDIT引入变量m password 4 3 5调用口令对话框 返回 在应用程序类的InitInstance 函数中编写调用口令对话框代码 1 修改InitInstance 函数BOOLCMyHelloApp InitInstance m pMainWnd UpdateWindow CPasswordDialogDlg 声明CpasswordDialog类的对象if Dlg DoModal IDOK returnfalse if Dlg m password 123456 口令设为字符串 123456 AfxMessageBox 口令错误 returnfalse returnTRUE 2 在MyHello cpp的头部 加入下面的包含语句 include PasswordDialog h 4 3 6显示非模式对话框 返回 请读者按以下要求编辑一菜单 ID ID NOMODALLESS Caption 非模式对话框 显示非模式对话框操作步骤如下 1 在视图类中添加对话框成员指针classCMyHelloView publicCview public CPasswordDialog m pModallessDlg 在MyHelloView h中加入 include PasswordDialog h 返回 2 修改视类的构造函数和析构函数分别在视类的构造函数和析构函数中添加如下代码 CMyHelloView CMyHelloView m pModallessDlg NULL 初始化指针 CMyHelloView CMyHelloView if m pModallessDlg NULL deletem pModallessDlg 释放空间 返回 3 编写调用非模式对话框代码 1 利用MFCClassWizard 为菜单ID NOMODALLESS添加了消息响应函数OnNomodalless 2 定位在OnNomodalless 函数 编写如下显示非模式对话框代码 voidCMyHelloView OnNomodalless if m pModallessDlg NULL m pModallessDlg newCPasswordDialog m pModallessDlg Create IDD PASSWORD DIALOG this m pModallessDlg ShowWindow SW SHOW 4 4通用对话框 在应用程序设计中 除使用自定义的对话框之外 经常用到系统定义的通用对话框类 通用对话框类用于各种Windows常用应用程序中 执行各种标准操作 它们由CDialog类派生而来 其资源全部包含在 Windows SYSTEM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省东莞市2022-2023学年九年级上学期期中化学试题(含答案)
- 2025医院消毒中心技能知识题库
- 电石炉知识培训课件
- 高级职称评定课件模板
- 电焊课件教学课件
- 电焊机维护保养课件
- 电焊技法知识培训课件
- 3-Oxo-deoxycholoyl-CoA-生命科学试剂-MCE
- 软件开发及技术服务协议
- 保洁员考试试题及答案选择题
- 农业代收代付业务管理规定
- 专业音响灯光租用协议(2024年版)
- 2024年短剧整合营销指南报告
- 小学语文基础知识单选题100道及答案解析
- 广西南宁宾阳县昆仑投资集团有限公司招聘笔试题库2024
- 人教版地理七年级上册《第一节 大洲和大洋》说课稿2
- 登高车施工方案
- 《多彩的超轻粘土》校本课程教案(共10课)
- 检验标本采集手册手册
- 《泵系统节能》课件
- 新制定《公平竞争审查条例》主题
评论
0/150
提交评论