MFC编程示例参考

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
48
1、变更控件变量
设置编辑框内 容的长度
49
头文件中的生成代码
// Dialog Data //{{AFX_DATA(CStep1Dlg) enum { IDD = IDD_STEP1_DIALOG }; CString m_edit; //}}AFX_DATA
50
构造函数中的生成代码
CStep1Dlg::CStep1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CStep1Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CStep1Dlg) m_edit = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
}
43
运行
有文字,变灰
44
3、编辑框的控制

对话框数据交换机制 DDX(Dialog Data exchange),用于控 件初始化和获取用户输入的数据。 对话框数据验证DDV(Dialog data validation),用于对话框中输入数据的合 法性检验。
用户只关心编辑框的内容,不 关心编辑框的属性,可以使用内容 相关变量操作编辑框。
所有和控件映射的变 量均在此
41
数据交换函数中的生成代码
系统自动添加代码如下
void CStep1Dlg::DoDataExchange(CDataExchange* 映射变量 pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CStep1Dlg) DDX_Control(pDX, IDC_EDIT1, m_edit); 控件ID //}}AFX_DATA_MAP }
56
3、编辑框消息
控件消息
选择控件
57
例3(接例2):

当编辑框的内容超出最大限制时,弹出警告框 步骤:
1、选择IDC_EDIT1的EN_ MAXTEXT消息 2、系统自动产生对于该消息的消息映射,并 生成处理函数 3、在处理函数中,添加弹出警告框的代码
58
1、选择IDC_EDIT1的EN_MAXTEXT消息
27
1)添加图片资源
点击鼠标右键, 选择Insert
Resource
28
1)添加图片资源
弹出添加 资源窗口
用于手 绘图案
选择已 有图案
选择 bitmap
29
2)将控件和图片资源关联
1、用鼠标选中“静态图片”,并拖入对话框中 2、点击鼠标右键,弹出属性对话框
类型选择 Bitmap
资源ID
30
2)将控件和图片资源关联
24
1、静态控件

静态控件是用来显示一个字符、边框、 图标、位图等,一般不接受用户的输入, 也不产生任何事件。
25
1、静态控件
组框 组合框 静态文本 静态图片 编辑框 按钮 列表框
复选框
单选框
标签
列表视图
树形视图
26
静态图片


适用范围 一般用于应用程序的logo图片 使用步骤 1、添加图片资源 2、将控件和图片资源关联
afx_msg void OnMaxtextEdit1();
//}}AFX_MSG DECLARE_MESSAGE_MAP() 消息处理函数
11
1、选择工程类别MFC AppWizard(exe)
选择MFC AppWizard(exe)
12
2、选择应用程序类别 Dialog Based
选择Dialog Based
13
3、选择应用程序外观
去掉该复选框
14
4、选择应用程序风格
15
5、确认相关类名称
16
6、完成,显示主窗口
主对话框 对话框资 源入口
45
3、编辑框的控制

通常使用UpdateData函数进行数据传递。
UpdateData(true):控件->成员变量 UpdateData(false):成员变量->控件

进行数据交换时UpdateData函数将设置一 个CDataExchange对象,并调用对话框中 的DoDataExchange重载函数。
7
二、演示例子

1、基于对话框的例子
8
二、演示例子

2、基于控制台的例子
9
三、相关知识
1、对话框程序 2、控件使用 标签、图片、编辑框、按钮、组合框、 列表框等。 3、类使用 4、文件使用
10
1、对话框程序

1.1步骤
1、选择工程类别 MFC AppWizard(exe) 2、选择应用程序类别 Dialog Based 3、选择应用程序外观 4、选择应用程序风格 5、确认相关类名称 6、完成,显示主窗口
Class视图
Resource视图
File视图
控件面版
17
对话框或控件

共同特征 1、Resource :外观 2、Class:逻辑实现 3、File:物理存储
18
运行
19
工程名称Step1
说明

1、CStep1App类 应用程序类,该类中包含程序的入口函数:
BOOL CStep1App::InitInstance() {… CStep1Dlg dlg; m_pMainWnd = &dlg; } 对应的文件Step1.h和Step1.cpp。
21
2、控件使用
组框 组合框 静态文本 静态图片 编辑框 按钮 列表框
复选框
单选框
标签
列表视图
树形视图
22
二、常用控件资源
静态图片 组框
编辑框
组合框 单选框
树形视图
静态文本
按钮
复选框
23
二、常用控件资源

什么是控件?
具有外观、属性和行为的元素,也就是说 每一种控件=resource+class。比如编辑框 CEdit类,按钮CButton类
51
数据交换函数中的生成代码
void CStep1Dlg::DoDataExchange(CDataExchange* pDX) { 映射变量 CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CStep1Dlg) DDX_Text(pDX, IDC_EDIT1, m_edit); DDV_MaxChars(pDX, m_edit, 4); 控件ID //}}AFX_DATA_MAP }
最大字符数
52
2、 在OnInitDialog()中添加新代码
BOOL CStep1Dlg::OnInitDialog() { // TODO: Add extra initialization here //m_edit.SetWindowText("welcome"); //m_edit.EnableWindow(false); m_edit = "123"; UpdateData(false); return TRUE; // return TRUE unless you set the focus to a control }
类别 B M M D
4
一、实习内容

程序框架:1、基于对话框应用程序。
5
一、实习内容

程序框架:2、基于控制台的应用程序
6
一、实习内容

程序功能: 1. 能够显示学生信息 2. 能够增加、删除、编辑学生信息 3. 能够按照学号或姓名查询学生信息 4. 能够分类统计(可选)、排序(可选) 5. 能够保存学生信息
控件消息
添加处理函数
59
消息映射
BEGIN_MESSAGE_MAP(CStep1Dlg, CDialog) //{{AFX_MSG_MAP(CStep1Dlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_MAXTEXT(IDC_EDIT1, OnMaxtextEdit1)
20
说明

由应用程序类调用
2、CStep1Dlg 主对话框类,却省应用程序的主窗口。
//数据交换的支持函数 void DoDataExchange(CDataExchange* pDX) //对话框初始化函数 BOOL OnInitDialog() //屏幕刷新函数 void OnPaint() 对应的文件Step1Dlg.h和Step1Dlg.cpp。
53
3、 运行
用户只能键 入4个字符
54
注意


1、每一个控件只能关联一个控件变量。 2、Control类型的变量只能在窗口弹出时 使用。可以用来改变编辑框的内容和属 性。 3、Value类型的变量只能改变编辑框的 内容。
55
3、编辑框控制


消息机制 控件响应键盘或鼠标的操作,称为事件。 发送消息给控件;控件获取消息后,进行处理。 EN_CHABGE: 内容改变 EN_SETFOCUS: 获取焦点 EN_MAXTEXT: 插入最多字符 入口 菜单View->ClassWizard
46
例2:编辑框使用

使用DDX和DDV控制编辑框的内容和长度 1、变更控件变量并注释掉OnInitDialog()
中的原有代码。 2、 在OnInitDialog()中添加新代码 3、 运行
47
1、变更控件变量
选择Value
删除原有变量, 增加新的变量
字符串选择CString 整型选择int、UINT、long等
//}}AFX_MSG_MAP
END_MESSAGE_MAP() 消息名称 控件ID 处理函数
60
消息处理函数(头文件)
// Generated message map functions //{{AFX_MSG(CStep1Dlg) virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon();
31
静态文本和组框


适用范围 一般用于静态的说明文字和边框, 与其他控件共同使用。 使用步骤 1、将控件拖入对话框 2、设置属性
32
2、编辑框
组框 组合框 静态文本 静态图片 编辑框图
树形视图
33
2、编辑框


适用范围 一般用于可编辑的单行或多行文字。 编辑框相关知识 resource: 资源外观,有唯一的ID class:CEdit 成员变量:属性 成员函数:设置属性和行为 CEdit的对象:控件变量
34
2、编辑框
如何使用编辑框? 1、将控件拖入对话框 2、设置属性 3、编程对其进行控制 1)设置关联控件变量 2)使用变量调用相关成员函数
35
2、编辑框属性
显示*
多行文本
只读
36
3、编辑框的控制

1)直接调用成员函数 //设置获取编辑框文字 SetWindowText(LPTSTR); GetWindowText(LPTSTR); //编辑框是否变灰 EnableWindow(BOOL); //编辑框是否可见 ShowWindow(int);
MFC基础
1
计算机实习

一、实习内容 二、演示例子 三、相关知识 1、对话框程序 2、控件使用 3、类使用 4、文件使用
2
一、实习内容

题目 实现一个基本的学生信息管理系统
3
一、实习内容

B 本科生 M 硕士生 D 博士生
存储介质:.txt文件(学号唯一)
姓名 张山 测试 周正 王丹 学号 B098 Y094 Y093 0102 年龄 23 23 23 29 系别 实验室 发表文章 电信学院 电信学院 lab3 电信学院 lab2 电信学院 LAB9 20
42
2、在窗口初始化时添加代码
BOOL CStep1Dlg::OnInitDialog() { … // TODO: Add extra initialization here m_edit.SetWindowText("welcome"); m_edit.EnableWindow(false); return TRUE; // return TRUE unless you set the focus to a control
37
例1:编辑框使用

设置编辑框的文字并使其变灰 1、设置控件变量 点击View->ClassWizard 2、在窗口初始化时添加代码
38
1、设置控件变量
点击添加变量
选择Control
39
1、设置控件变量
40
1、设置控件变量
系统自动添加代码如下
// Dialog Data //{{AFX_DATA(CStep1Dlg) enum { IDD = IDD_STEP1_DIALOG }; CEdit m_edit; //}}AFX_DATA
相关文档
最新文档