免费预览已结束,剩余142页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 MFC基础 指导教师 徐雅静 2 计算机实习 一 实习内容二 演示例子三 相关知识1 对话框程序2 控件使用3 类使用4 文件使用 3 一 实习内容 题目实现一个基本的学生信息管理系统 4 一 实习内容 存储介质 txt文件 学号唯一 类别姓名学号年龄系别实验室发表文章B张山B09823电信学院M测试Y09423电信学院lab3M周正Y09323电信学院lab2D王丹010229电信学院LAB920 B本科生M硕士生D博士生 5 一 实习内容 程序框架 1 基于对话框应用程序 6 一 实习内容 程序框架 2 基于控制台的应用程序 7 一 实习内容 程序功能 1 能够显示学生信息2 能够增加 删除 编辑学生信息3 能够按照学号或姓名查询学生信息4 能够分类统计 可选 排序 可选 5 能够保存学生信息 8 一 实习内容 评分标准1 界面6 10分2 显示 增加 删除 编辑 查询 保存每项功能6 10分3 分类统计6 10分4 排序6 10分5 其他6 10分 9 二 演示例子 1 基于对话框的例子 10 二 演示例子 2 基于控制台的例子 11 三 相关知识 1 对话框程序2 控件使用标签 图片 编辑框 按钮 组合框 列表框等 3 类使用4 文件使用 12 1 对话框程序 1 1步骤1 选择工程类别MFCAppWizard exe 2 选择应用程序类别DialogBased3 选择应用程序外观4 选择应用程序风格5 确认相关类名称6 完成 显示主窗口 13 1 选择工程类别MFCAppWizard exe 选择MFCAppWizard exe 14 2 选择应用程序类别DialogBased 选择DialogBased 15 3 选择应用程序外观 去掉该复选框 16 4 选择应用程序风格 17 5 确认相关类名称 18 6 完成 显示主窗口 控件面版 主对话框 对话框资源入口 Resource视图 Class视图 File视图 19 对话框或控件 共同特征1 Resource 外观2 Class 逻辑实现3 File 物理存储 20 运行 21 说明 1 CStep1App类应用程序类 该类中包含程序的入口函数 BOOLCStep1App InitInstance CStep1Dlgdlg m pMainWnd 对应的文件Step1 h和Step1 cpp 工程名称Step1 22 说明 2 CStep1Dlg主对话框类 却省应用程序的主窗口 数据交换的支持函数voidDoDataExchange CDataExchange pDX 对话框初始化函数BOOLOnInitDialog 屏幕刷新函数voidOnPaint 对应的文件Step1Dlg h和Step1Dlg cpp 由应用程序类调用 23 2 控件使用 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 24 二 常用控件资源 静态图片 树形视图 按钮 复选框 单选框 组合框 编辑框 组框 静态文本 25 二 常用控件资源 什么是控件 具有外观 属性和行为的元素 也就是说每一种控件 resource class 比如编辑框 CEdit类 按钮 CButton类 26 1 静态控件 静态控件是用来显示一个字符 边框 图标 位图等 一般不接受用户的输入 也不产生任何事件 27 1 静态控件 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 28 静态图片 适用范围一般用于应用程序的logo图片使用步骤1 添加图片资源2 将控件和图片资源关联 29 1 添加图片资源 Resource 点击鼠标右键 选择Insert 30 1 添加图片资源 弹出添加资源窗口 选择bitmap 用于手绘图案 选择已有图案 31 2 将控件和图片资源关联 1 用鼠标选中 静态图片 并拖入对话框中2 点击鼠标右键 弹出属性对话框 类型选择Bitmap 资源ID 32 2 将控件和图片资源关联 33 静态文本和组框 适用范围一般用于静态的说明文字和边框 与其他控件共同使用 使用步骤1 将控件拖入对话框2 设置属性 34 2 编辑框 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 35 2 编辑框 适用范围一般用于可编辑的单行或多行文字 编辑框相关知识resource 资源外观 有唯一的IDclass CEdit成员变量 属性成员函数 设置属性和行为CEdit的对象 控件变量 36 2 编辑框 如何使用编辑框 1 将控件拖入对话框2 设置属性3 编程对其进行控制1 设置关联控件变量2 使用变量调用相关成员函数 37 2 编辑框属性 多行文本 显示 只读 38 3 编辑框的控制 1 直接调用成员函数 设置获取编辑框文字SetWindowText LPTSTR GetWindowText LPTSTR 编辑框是否变灰EnableWindow BOOL 编辑框是否可见ShowWindow int 39 例1 编辑框使用 设置编辑框的文字并使其变灰1 设置控件变量点击View ClassWizard2 在窗口初始化时添加代码 40 1 设置控件变量 点击添加变量 选择Control 41 1 设置控件变量 42 1 设置控件变量 系统自动添加代码如下 DialogData AFX DATA CStep1Dlg enum IDD IDD STEP1 DIALOG CEditm edit AFX DATA 所有和控件映射的变量均在此 43 数据交换函数中的生成代码 系统自动添加代码如下voidCStep1Dlg DoDataExchange CDataExchange pDX CDialog DoDataExchange pDX AFX DATA MAP CStep1Dlg DDX Control pDX IDC EDIT1 m edit AFX DATA MAP 控件ID 映射变量 44 2 在窗口初始化时添加代码 BOOLCStep1Dlg OnInitDialog TODO Addextrainitializationherem edit SetWindowText welcome m edit EnableWindow false returnTRUE returnTRUEunlessyousetthefocustoacontrol 45 运行 有文字 变灰 46 3 编辑框的控制 对话框数据交换机制DDX DialogDataexchange 用于控件初始化和获取用户输入的数据 对话框数据验证DDV Dialogdatavalidation 用于对话框中输入数据的合法性检验 用户只关心编辑框的内容 不关心编辑框的属性 可以使用内容相关变量操作编辑框 47 3 编辑框的控制 通常使用UpdateData函数进行数据传递 UpdateData true 控件 成员变量UpdateData false 成员变量 控件进行数据交换时UpdateData函数将设置一个CDataExchange对象 并调用对话框中的DoDataExchange重载函数 48 例2 编辑框使用 使用DDX和DDV控制编辑框的内容和长度1 变更控件变量并注释掉OnInitDialog 中的原有代码 2 在OnInitDialog 中添加新代码3 运行 49 1 变更控件变量 删除原有变量 增加新的变量 选择Value 字符串选择CString整型选择int UINT long等 50 1 变更控件变量 设置编辑框内容的长度 51 头文件中的生成代码 DialogData AFX DATA CStep1Dlg enum IDD IDD STEP1 DIALOG CStringm edit AFX DATA 52 构造函数中的生成代码 CStep1Dlg CStep1Dlg CWnd pParent NULL CDialog CStep1Dlg IDD pParent AFX DATA INIT CStep1Dlg m edit T AFX DATA INIT NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m hIcon AfxGetApp LoadIcon IDR MAINFRAME 53 数据交换函数中的生成代码 voidCStep1Dlg DoDataExchange CDataExchange pDX CDialog DoDataExchange pDX AFX DATA MAP CStep1Dlg DDX Text pDX IDC EDIT1 m edit DDV MaxChars pDX m edit 4 AFX DATA MAP 控件ID 映射变量 最大字符数 54 2 在OnInitDialog 中添加新代码 BOOLCStep1Dlg OnInitDialog TODO Addextrainitializationhere m edit SetWindowText welcome m edit EnableWindow false m edit 123 UpdateData false returnTRUE returnTRUEunlessyousetthefocustoacontrol 55 3 运行 用户只能键入4个字符 56 注意 1 每一个控件只能关联一个控件变量 2 Control类型的变量只能在窗口弹出时使用 可以用来改变编辑框的内容和属性 3 Value类型的变量只能改变编辑框的内容 57 3 编辑框控制 消息机制控件响应键盘或鼠标的操作 称为事件 发送消息给控件 控件获取消息后 进行处理 EN CHABGE 内容改变EN SETFOCUS 获取焦点EN MAXTEXT 插入最多字符入口菜单View ClassWizard 58 3 编辑框消息 选择控件 控件消息 59 例3 接例2 当编辑框的内容超出最大限制时 弹出警告框步骤 1 选择IDC EDIT1的EN MAXTEXT消息2 系统自动产生对于该消息的消息映射 并生成处理函数3 在处理函数中 添加弹出警告框的代码 60 1 选择IDC EDIT1的EN MAXTEXT消息 控件消息 添加处理函数 61 消息映射 BEGIN MESSAGE MAP CStep1Dlg CDialog AFX MSG MAP CStep1Dlg ON WM PAINT ON WM QUERYDRAGICON ON EN MAXTEXT IDC EDIT1 OnMaxtextEdit1 AFX MSG MAPEND MESSAGE MAP 控件ID 消息名称 处理函数 62 消息处理函数 头文件 Generatedmessagemapfunctions AFX MSG CStep1Dlg virtualBOOLOnInitDialog afx msgvoidOnPaint afx msgHCURSOROnQueryDragIcon afx msgvoidOnMaxtextEdit1 AFX MSGDECLARE MESSAGE MAP 消息处理函数 63 处理函数中添加代码 voidCStep1Dlg OnMaxtextEdit1 TODO AddyourcontrolnotificationhandlercodehereUpdateData true AfxMessageBox m edit 64 运行 65 3 按钮 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 66 3 按钮 常见的按钮分为三类1 按钮2 单选框3 复选框消息映射BN CLICKEDBN DOUBLE CLICKED 67 例4 按钮的使用 IDC RADIO1 IDC RADIO2 IDC CHECK1 IDC CHECK2 IDC CHECK3 IDC BUTTON1 68 例4 设置并获取单选框和复选框的值1 设置控件变量2 添加按钮的消息映射3 添加单选框的消息映射4 在按钮和单选框的消息处理函数中添加代码5 运行 69 1 设置控件变量 单选框必须选中Group 去掉auto 70 1 设置控件变量 IDC CHECK1IDC CHECK2IDC CHECK3IDC RADIO1IDC RADIO2 71 2 添加按钮的消息映射 72 3 添加单选框的消息映射 73 4 在消息处理函数中添加代码 voidCStep1Dlg OnRadio1 m radmale SetCheck true m radfemale SetCheck false voidCStep1Dlg OnRadio2 m radmale SetCheck false m radfemale SetCheck true 74 4 在消息处理函数中添加代码 voidCStep1Dlg OnButton1 CStringstr if m radmale GetCheck m radmale GetWindowText str elsem radfemale GetWindowText str UpdateData true if m chk1 str 游泳 if m chk2 str 跑步 if m chk3 str 打球 MessageBox str 测试 MB OKCANCEL 75 5 运行 76 4 组合框 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 77 4 组合框 组合框控件有三种风格 Simple 包含一个编辑框和总是显示的列表框 DropDown 仅当单击下滚箭头时才出现列表框 DropList 仅当单击下滚箭头时才出现列表框 但是没有编辑功能 用户只能选择列表中已有的项 78 4 组合框 组合框的事件CBN SELCHANGE如果选择项改变CBN EDITCHANGE如果编辑框种文字改变 79 4 组合框的方法 1 获取组合框中的项数intGetCount 2 获取组合框中指定位置的文字voidGetLBText intnIndex CString rString 80 4 组合框的方法 3 获取 设置当前选择项SetCurSel intindex intGetCurSel 4 添加 删除文字项intAddString LPCTSTRlpszString intInsertString intnIndex LPCTSTRlpszString intDeleteString UINTnIndex 81 4 组合框的方法 5 从组合框中查询指定字符串intFindString intnStartAfter LPCTSTRlpszString intFindStringExact intnIndexStart LPCTSTRlpszFind 82 例5 向组合框添加数据 并获取所选的数据1 设置控件变量2 设置控件属性3 在OnInitDialog 中添加初始化代码4 添加组合框消息映射CBN SELCHANGE5 在处理函数中添加代码 83 1 设置控件变量 84 2 设置控件属性 可以直接在添加数据 CTRL ENTER换行 组合框风格 85 3 在OnInitDialog 中添加初始化代码 BOOLCStep1Dlg OnInitDialog m combo1 AddString 24 m combo1 InsertString 0 20 m combo1 SetCurSel 3 returnTRUE returnTRUEunlessyousetthefocustoacontrol 86 运行测试 87 4 添加组合框消息映射CBN SELCHANGE 88 5 在处理函数中添加代码 voidCStep1Dlg OnSelchangeCombo1 TODO Addyourcontrolnotificationhandlercodehereintindex m combo1 GetCurSel CStringstr m combo1 GetLBText index str AfxMessageBox str 89 运行 90 5 树形视图 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 91 5 树形视图 IDC TREE1 Lines button 92 设置控件属性 风格 93 常用树形控件的事件 树形控件NM CLICKEDNM RCLICKEDNM SETFOCUS树结点TVN SELCHANGEDTVN ITEMEXPANDEDTVN DELETEITEM 94 树形控件的方法 1 插入 删除结点HTREEITEMInsertItem LPCTSTRlpszItem HTREEITEMhParent TVI ROOT HTREEITEMhInsertAfter TVI LAST BOOLDeleteItem HTREEITEMhItem BOOLDeleteAllItems 2 获取选中的结点HTREEITEMGetSelectitem 95 树形控件的方法 3 设置 获取已知结点的标题CStringGetItemText HTREEITEMhitem BOOLSetItemText HTREEITEMhItem LPCTSTRlpszItem 4 获取结点之间的关系BOOLItemHasChildren HTREEITEMhItem HTREEITEMGetChildItem HTREEITEMhItem HTREEITEMGetNextSiblingItem HTREEITEMhItem 96 树形控件的方法 5 结点展开 收缩BOOLExpand HTREEITEMhItem UINTnCode ncode的取值 TVE COLLAPSETVE COLLAPSERESETTVE EXPANDTVE TOGGLE 97 例6 添加并获取选中的树结点1 设置控件变量2 在OnInitDialog 初始化3 添加树形控件的消息映射4 在消息处理函数中添加代码5 运行 98 1 设置控件变量 99 2 在OnInitDialog 初始化 BOOLCStep1Dlg OnInitDialog HTREEITEMroot m tree1 InsertItem 本科生 m tree1 InsertItem 张三 root m tree1 InsertItem 李四 root m tree1 Expand root TVE EXPAND root m tree1 InsertItem 研究生 m tree1 InsertItem 王单 root m tree1 InsertItem 丁一 root 100 3 添加树形控件的消息映射 101 4 在消息处理函数中添加代码 voidCStep1Dlg OnSelchangedTree1 NMHDR pNMHDR LRESULT pResult NM TREEVIEW pNMTreeView NM TREEVIEW pNMHDR TODO AddyourcontrolnotificationhandlercodehereHTREEITEMhitem m tree1 GetSelectedItem m edit m tree1 GetItemText hitem if m edit 本科生 102 5 运行 和树形控件结点对应 103 例7 删除当前选中结点的所有孩子 HTREEITEMhitem m tree1 GetSelectedItem if m tree1 ItemHasChildren hitem HTREEITEMhNext HTREEITEMhChild m tree1 GetChildItem hitem while hChild NULL hNext m tree1 GetNextSiblingItem hChild m tree1 DeleteItem hChild hChild hNext 104 5 列表视图 静态图片 编辑框 静态文本 组框 按钮 复选框 单选框 组合框 列表框 列表视图 树形视图 标签 105 5 列表视图的风格 icon smallicon list report 106 5 列表视图的事件 列表控件NM CLICKEDNM RCLICKEDNM SETFOCUS列表数据LVN ITEMCHANGEDLVN COLUMNCLICKLVN DELETEITEMLVN INSERTITEM 107 5 列表视图的方法 1 添加 删除列intInsertColumn intnCol LPCTSTRlpszColumnHeading intnFormat LVCFMT LEFT intnWidth 1 intnSubItem 1 BOOLDeleteColumn intnCol 108 5 列表视图的方法 2 添加 删除数据intInsertItem intnItem LPCTSTRlpszItem intInsertItem intnItem LPCTSTRlpszItem intnImage BOOLDeleteItem intnItem BOOLDeleteAllItems 109 5 列表视图的方法 3 获取列表中数据CStringGetItemText intnItem intnSubItem BOOLSetItemText intnItem intnSubItem LPTSTRlpszText 4 列标与图标关联CImageList SetImageList CImageList pImageList intnImageList CImageList GetImageList intnImageList 110 5 列表视图的方法 5 获取列表中选中的行POSITIONGetFirstSelectedItemPosition intGetNextSelectedItem POSITION 111 6 对话框 1 有模式对话框比如设置属性对话框 一般包括OK和Cancle按钮 使用DoModal 函数调用 利用其返回值判断该窗口由哪个按钮关闭 2 无模式对话框比如查找对话框 112 例8 如何新建一个有模式对话框 1 新建对话框资源2 设置对话框属性3 生成对应的对话框类4 测试对话框 113 1 新建对话框资源 1 点击鼠标右键2 选择InsertDialog 114 1 新建对话框资源 资源ID 对话框外观 115 2 设置对话框属性 缺省ID 字体 标题 是否有菜单 风格 边框 窗口右上角 116 3 生成对应的对话框类 点击右键菜单classwizard弹出 117 3 生成对应的对话框类 类名 对应源文件 基类名 资源ID 118 3 生成对应的对话框类 资源ID和类的对应enum IDD IDD DIALOG1 119 4 测试对话框 1 在主对话框中添加 include dialog1 h 2 在主对话框的OnButton1 函数中添加CDialog1dlg1 if dlg1 DoModal IDOK AfxMessageBox 点击OK按钮 elseAfxMessageBox 点击Cancle按钮 120 5 运行 121 例9 在另一个窗口显示列表框 步骤1 设置图标2 设置列表框变量3 设置列表外观属性4 在CDialog1类的OnInitDialog中添加代码将图标与列表相连 设置列表列标题5 在CStep1Dlg类的OnButton1 中添加代码初始化列表视图数据6 运行 122 1 设置图标 在资源视图中添加三个ICON 123 2 设置列表变量 设置控件变量 124 3 设置列表外观属性 风格 单选 125 4 在OnInitDialog中添加代码将图标与列表相连 1 首先需要在CDialog1中添加成员变量public CImageList m pImageList 用来传递来自主窗口的数据CStringname CStringgender CStringage 126 2 添加OnInitDialog 事件 127 4 在OnInitDialog中添加代码将图标与列表相连 BOOLCDialog1 OnInitDialog CDialog OnInitDialog TODO AddextrainitializationhereCStep1App pApp CStep1App AfxGetApp m pImageList newCImageList m pImageList Create 16 16 ILC COLOR32 0 10 m pImageList Add pApp LoadIcon IDI ICON1 m pImageList Add pApp LoadIcon IDI ICON2 m pImageList Add pApp LoadIcon IDI ICON3 m list SetImageList m pImageList LVSIL SMALL 创建16 16的32位色的图标列表 将图标调入内存 图标与列表关联 128 5 在OnInitDialog中添加代码初始化列表视图 BOOLCDialog1 OnInitDialog 添加列m list InsertColumn 0 姓名 LVCFMT CENTER 60 1 m list InsertColumn 1 年龄 LVCFMT CENTER 60 0 m list InsertColumn 2 性别 LVCFMT CENTER 60 1 添加数据m list InsertItem 0 name 1 m list SetItemText 0 1 gender m list SetItemText 0 2 age 129 5 为主窗口的 确定 按钮添加事件及代码 voidCStep1Dlg OnOK TODO AddextravalidationhereCDialog1dlg1 UpdateData false dlg1 name m edit dlg1 gender m radmale GetCheck 男 女 m combo1 GetLBText m combo1 GetCurSel dlg1 age dlg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 优化护士排班方案:效率与满意度平衡
- 高中英语苏州-周绮霞
- 2025年中级会计职称财务管理试题测试题答案版
- 建筑施工企业机械设备管理制度
- 2025年方剂学补益剂功效考试及答案
- 场地租赁长期合同
- 医药行业市场分析与技术规范
- 科技创新行业技术规范与市场动态
- 技术工种劳务合同
- 湖北省十堰市小学二年级上学期数学期末测试卷
- 浙江省城市环境卫生劳动定额
- 人教版音乐八年纪下册《京剧《铡美案》选段》课件
- 体检质量评价表
- 一年级家访记录表(常用)
- -内镜洗消质量的持续改进课件
- 微生物学复习提纲 周德庆
- 解除(终止)劳动合同证明书-社保局版本
- 内部审计主要工作(《内部审计》)课件
- 护士延续注册申请表范本
- 【单元设计】第七章《万有引力与宇宙航行》单元教学设计及教材分析课件高一物理人教版(2019)必修第二册
- 弹性力学(徐芝纶)课后习题及答案(共94页)
评论
0/150
提交评论