vc12
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
25
12.3 输入/输出处理程序
●输入输出处理是几乎所有Windows应用 程序最基本的功能之一 ● Windows应用程序通过对键盘消息和鼠 标消息的响应完成对用户输入的处理 ●通过GDI提供的绘图函数在窗口的客户 区输出信息。
26
1. 文本输出程序
文本输出指在窗口客户区特定位 置输出用户指定的相关文本信息。 在MFC中,CDC类实现了对设备 环境的封装,CDC类有许多成员函数, 完成各种与设备环境有关的操作。
22
(4)视图类
● CMyWinP应用程序的视图类名为 CMyWinPView,类的声明在头文件MyWinPView.h 中,而类的实现在文件MyWinPView.cpp中。
●视图类主要管理视图窗口,Hale Waihona Puke 责用户数据的输 入和数据的输出显示。
●在创建一个单文档应用程序时,也可以选择将 视图类从非CView类的其他子类派生出来,例如, 在Base Class中选择CEditView作为基本视图类,则 可以很方便的得到一个简易的字处理程序。
23
(5) 其他文件
●除以上主要类之外,AppWizard还自动生 成Stdafx.cpp和stdafx.h两个文件。 这两个文件是每个基于MFC程序所必需的, ●用于建立一个预编译头文件*.pch和一个预 定义的类型文件stdafx.obj。 ● MFC包含很多头文件,如果每次都编译则 比较费时,将afxwin.h、afxext.h、afxcmn.h、 afxdisp.h都放在stdafx.h文件中,这样编译系 统可以识别哪些文件已经编译过,以加速应 用程序的编译过程。
//NOTE-the ClassWizard will add and remove mapping macros here. //DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP //Standard file based document commands ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:: OnFilePrintSetup) END_MESSAGE_MAP()
● Windows程序与其他程序最大的不同之处在 于使用消息机制。 ● Windows程序中所发生的一切都可以用消息表 示,消息用于告诉操作系统所发生的事情, 如按键操作或鼠标操作等。 ● MFC应用程序也使用基于消息的事件驱动机 制,而且MFC提供的消息处理机制使得用户 可以更加方便、简易的处理消息。 ●在Windows中,所有消息都是通过消息名进行 访问的,但不同类型的消息由应用程序的不 同部分进行处理。
28
参数含义
●参数1pszString是指向输出字符串的指针; ●参数nCount指定字符串的长度,如果为-1,
则1pszString是一个指向以null结尾的字符串的 长指针; ●参数lpRect是指向RECT结构的指针; ●参数nFormat用于指定输出格式; ● str表示存储字符串的CString对象。
21
(3)文档类
●CMyWinP应用程序的文档类名为CMyWinPDoc, 从MFC的CDocument类派生而来。其类的声明在头 文 件 CMyWinPDoc.h 中 , 类 的 实 现 在 文 件 CMyWinPDoc.cpp中。 ●文档类的主要作用是保存应用程序的数据,并 提供磁盘文件操作。 ●用户需要修改文档类,增加成员变量以存储应 用程序的数据、增加成员函数以获得和修改数据, 然后为应用程序服务。
MFC典型应用程序设计
1
本章主要内容:
●Windows应用程序的消息处理机制 ●应用程序分析 ●输入/输出处理程序(文本输出、键盘及鼠标消 息处理等) ●菜单应用程序设计 ●工具栏应用程序设计 ●状态栏应用程序设计 ●对话框应用程序设计 ●控件应用程序设计 ●数据库应用程序设计
2
12.1 消息处理机制
here.
//DO NOT EDIT what you see in these blocks of generated code !
13
在实现文件中的消息映射代码
BEGIN_MESSAGE_MAP(CMyWinPApp,CWinApp) //{{AFX_MSG_MAP(CMyWinPApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
14
消息映射宏的使用
●宏DECLARE_MESSAGE_MAP用于
类声明文件的结束处,即在.h文件的结 束处。 ●宏BEGIN_MESSAGE_MAP和 END_MESSAGE_MAP用于类的实现文 件(.cpp)中实现消息映射,而且这两 个宏必须配合使用。
15
消息映射宏的使用(续)
在 BEGIN_MESSAGE_MAP 与 END_MESSAGE_MAP中间列出了消息映射的各个 入口。例如,以下消息映射语句: ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) 表 示 当 用 户 单 击 了 菜 单 项 File|Open 时 , 则 发 送 WM_COMMAND消息,该消息找到此语句,发现 资源ID值与资源ID_FILE_OPEN匹配,则执行该语 句中指定的成员函数CWinApp::OnFileOpen ()。
24
2. 应用程序的运行机制
Windows应用程序的执行过程如下: ●自动调用应用程序框架内的WinMain函数。 WinMain()自动查找由CWinApp派生类构造 函数创建的全局对象theApp。 ●WinMain函数调用调用Initlnstance成员函 数,完成应用程序实例的初始化。 ●WinMain函数调用Run成员函数,进入消 息循环。 ●WinMain函数退出,调用有关成员函数进 行必要的清理工作,程序运行中止。
●
16
12.2 应用程序分析
向导AppWizard生成的单文档应用程 序一般包括四个基本类:
●应用程序类 ●主框架窗口类 ●文档类和 ●视图类
17
1.AppWizard向导生成的类和文件
●单击项目工作区的ClassView标签,则显示
CMainFrame、CMyWinPApp、CMyWinPDoc和 CMyWipView等,这是应用程序MyWinP的全部类。 ●利用AppWizard向导创建应用程序框架时,产生 的各派生类将被创建单独的源文件。 ●单击某一类名(如CMyWinPView)前的“+”号, 则列出该类的成员函数,双击类名或成员函数名 (如GetDocument),则源代码编辑区显示出该类或 该成员函数的实现代码。
27
DrawText函数
DrawText函数是CDC类用于文本输出的成员 函数之一,它的作用是在指定矩形区域内以当前 字体、颜色等属性及指定的显示方式显示字符串。 DrawText函数的格式如下:
形式一: virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat ); 形式二: int DrawText(const CString&str, LPRECT lpRect, UINT nFormat );
6
定时消息
●定时消息也是Windows的一类重要消息。
●当需要应用程序每隔一个指定的时间间隔便执行某
一特定操作时,就需要使用定时消息WM_TIMER。
●在进行定时操作时,用户需要调用SetTimer函数创建
一个定时器,并设置定时器的事件标志nIDEvent及时 间间隔nElapse,然后编写消息WM_TIMER的消息处 理函数OnTimer(),实现定时操作。
5
控件通知消息
●控件通知消息是指当控件的状态发生改变时,控件 向其父窗口发送的消息。 ● MFC对控件通知消息的传递方式与其他以WM开 头的Windows消息一样,但BN_CLICKED例外,该 消息的传递方式与命令消息的传递机制相同。
●对于Windows消息和控件通知消息,MFC将消息传 递给相应的窗口处理。
20
(2)主框架架窗口类
●CMyWinP 应 用 程 序 的 主 框 架 窗 口 类 名 为 CMainFrame,它由CWnd的一个子类派生而来, 该子类即CFrameWnd。 ●CMainFrame类的声明在头文件MainFrame.h 中,类的实现在文件MainFrame.cpp中。 ●CMainFrame类管理主框架窗口,并拥有一 些如菜单、工具栏和状态栏等控件,同时,它 还扮演转发菜单和工具栏消息的角色。
8
2 MFC消息映射机制
●消息映射是指将消息与处理函数相联系,即 当系统产生一条消息时,它能找到处理该消息 的函数。
●消息映射是Windows基于消息映射的事件驱 动机制的重要内容之一。
9
Visual C++的消息映射宏
消息映射宏 DECLARE_MESSAG E_MAP BEGIN_MESSAGE_ MAP END_MESSAGE_M AP ON_COMMAND ON_COMMAND_RA NGE 功 能 在头文件中使用,用于声明在源文件中存在消息 映射 表示消息映射的开始,用于源代码文件中 表示消息映射的结束,用于源代码文件中 将特定的命令消息映射到类的成员函数,即使用 该成员函数处理消息 将一组特定的命令消息映射到类的成员函数
3
1. MFC消息种类
消息机制是 Windows应用程序的核 心,MFC中的消息可以分为: ● Windows消息 ●控件通知消息 ●定时消息 ●命令消息
4
Windows消息
● Windows消息通常指以WM开头的消息, 但WM_COMMAND除外。 ●键盘消息和鼠标消息都属于Windows消 息,Windows消息由窗口和视图进行处 理。 ● Windows消息通常带有若干个参数传递 给消息处理函数,这些参数为处理函数 正确地处理消息提供了充分的信息。
10
消息映射宏
Visual C++的消息映射分为两个方面:
●一是在头文件.h中处理 ●一是在实现文件.cpp中处理
11
消息映射举例
以上一章所创建的应用程序 MyWinP为例,打开该应用程序 源代码,其中有以下关于消息映 射的代码(见下页)。
12
在头文件MyWinp.h中的消息映射代码
//{{AFX_MSG(CMyWinPApp) afx_msg void OnAppAbout(); //NOTE-the ClassWizard will add and remove member functions //}}AFX_MSG DECLARE_MESSAGE_MAP()
18
观察应用程序MyWinP 的类和文件
19
(1)应用程序类
●MyWinP程序的应用程序类名为 CMyWinPApp ,由CwinApp类派生而来。 ●该类的每一个对象代表一个应用程序,程序 中默认定义一个全局对象theApp。 ●CMyWinPApp类的功能是管理整个应用程序, 负责程序的启动、初始化、窗口的创建以及从 Windows中获取消息并将消息分发到适当的目 的地。CMyWinPApp类的声明在头文件 MyWinPApp.h中,类的实现在CMyWinPApp.cpp 中。
cbitmapbutton控件cchecklistbox控件cdraglistbox控件cprogressctr控件cstatusbar控件等84控件mfc类简要说明静态文本控件cstatic用于为其他控件显示文本标签图形控件cstatic用于显示图标编辑框控件cedit用于文本输入的控件组框控件ccombobox将列表框和编辑框控件有机组合按钮控件cbutton用于执行命令单选按钮cbutton用于对互相排斥的选项进行选择复选框cbutton用于选择多个独立的选项水平滚动条控件cscrollbar提供水平滚动功能垂直滚动条控件cscrollbar提供垂直滚动功能列表框控件clistbox以列表的方式给用户提供选择85一般情况下利用visualc资源编辑器创建控件的步骤如下
7
命令消息
●命令消息是来自于用户界面对象的 WM_COMMAND消息。 ●包括菜单、工具栏按钮和加速键都属于命令消息 等。即每当用户选择一个菜单项、单击一个按钮 或需要告诉操作系统应当执行什么操作时,则发 送一条WM_COMMAND命令消息。
● WM_COMMAND 消 息 的 消 息 映 射 宏 为 OnCommand()。所有命令消息都包含有一个相同 类型的参数,即该命令消息需要操作的资源ID值, 由ID值映射消息处理函数。
29
TextOut函数
●TextOut函数也是CDC类用于文本输出的成员函数,
12.3 输入/输出处理程序
●输入输出处理是几乎所有Windows应用 程序最基本的功能之一 ● Windows应用程序通过对键盘消息和鼠 标消息的响应完成对用户输入的处理 ●通过GDI提供的绘图函数在窗口的客户 区输出信息。
26
1. 文本输出程序
文本输出指在窗口客户区特定位 置输出用户指定的相关文本信息。 在MFC中,CDC类实现了对设备 环境的封装,CDC类有许多成员函数, 完成各种与设备环境有关的操作。
22
(4)视图类
● CMyWinP应用程序的视图类名为 CMyWinPView,类的声明在头文件MyWinPView.h 中,而类的实现在文件MyWinPView.cpp中。
●视图类主要管理视图窗口,Hale Waihona Puke 责用户数据的输 入和数据的输出显示。
●在创建一个单文档应用程序时,也可以选择将 视图类从非CView类的其他子类派生出来,例如, 在Base Class中选择CEditView作为基本视图类,则 可以很方便的得到一个简易的字处理程序。
23
(5) 其他文件
●除以上主要类之外,AppWizard还自动生 成Stdafx.cpp和stdafx.h两个文件。 这两个文件是每个基于MFC程序所必需的, ●用于建立一个预编译头文件*.pch和一个预 定义的类型文件stdafx.obj。 ● MFC包含很多头文件,如果每次都编译则 比较费时,将afxwin.h、afxext.h、afxcmn.h、 afxdisp.h都放在stdafx.h文件中,这样编译系 统可以识别哪些文件已经编译过,以加速应 用程序的编译过程。
//NOTE-the ClassWizard will add and remove mapping macros here. //DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP //Standard file based document commands ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:: OnFilePrintSetup) END_MESSAGE_MAP()
● Windows程序与其他程序最大的不同之处在 于使用消息机制。 ● Windows程序中所发生的一切都可以用消息表 示,消息用于告诉操作系统所发生的事情, 如按键操作或鼠标操作等。 ● MFC应用程序也使用基于消息的事件驱动机 制,而且MFC提供的消息处理机制使得用户 可以更加方便、简易的处理消息。 ●在Windows中,所有消息都是通过消息名进行 访问的,但不同类型的消息由应用程序的不 同部分进行处理。
28
参数含义
●参数1pszString是指向输出字符串的指针; ●参数nCount指定字符串的长度,如果为-1,
则1pszString是一个指向以null结尾的字符串的 长指针; ●参数lpRect是指向RECT结构的指针; ●参数nFormat用于指定输出格式; ● str表示存储字符串的CString对象。
21
(3)文档类
●CMyWinP应用程序的文档类名为CMyWinPDoc, 从MFC的CDocument类派生而来。其类的声明在头 文 件 CMyWinPDoc.h 中 , 类 的 实 现 在 文 件 CMyWinPDoc.cpp中。 ●文档类的主要作用是保存应用程序的数据,并 提供磁盘文件操作。 ●用户需要修改文档类,增加成员变量以存储应 用程序的数据、增加成员函数以获得和修改数据, 然后为应用程序服务。
MFC典型应用程序设计
1
本章主要内容:
●Windows应用程序的消息处理机制 ●应用程序分析 ●输入/输出处理程序(文本输出、键盘及鼠标消 息处理等) ●菜单应用程序设计 ●工具栏应用程序设计 ●状态栏应用程序设计 ●对话框应用程序设计 ●控件应用程序设计 ●数据库应用程序设计
2
12.1 消息处理机制
here.
//DO NOT EDIT what you see in these blocks of generated code !
13
在实现文件中的消息映射代码
BEGIN_MESSAGE_MAP(CMyWinPApp,CWinApp) //{{AFX_MSG_MAP(CMyWinPApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
14
消息映射宏的使用
●宏DECLARE_MESSAGE_MAP用于
类声明文件的结束处,即在.h文件的结 束处。 ●宏BEGIN_MESSAGE_MAP和 END_MESSAGE_MAP用于类的实现文 件(.cpp)中实现消息映射,而且这两 个宏必须配合使用。
15
消息映射宏的使用(续)
在 BEGIN_MESSAGE_MAP 与 END_MESSAGE_MAP中间列出了消息映射的各个 入口。例如,以下消息映射语句: ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) 表 示 当 用 户 单 击 了 菜 单 项 File|Open 时 , 则 发 送 WM_COMMAND消息,该消息找到此语句,发现 资源ID值与资源ID_FILE_OPEN匹配,则执行该语 句中指定的成员函数CWinApp::OnFileOpen ()。
24
2. 应用程序的运行机制
Windows应用程序的执行过程如下: ●自动调用应用程序框架内的WinMain函数。 WinMain()自动查找由CWinApp派生类构造 函数创建的全局对象theApp。 ●WinMain函数调用调用Initlnstance成员函 数,完成应用程序实例的初始化。 ●WinMain函数调用Run成员函数,进入消 息循环。 ●WinMain函数退出,调用有关成员函数进 行必要的清理工作,程序运行中止。
●
16
12.2 应用程序分析
向导AppWizard生成的单文档应用程 序一般包括四个基本类:
●应用程序类 ●主框架窗口类 ●文档类和 ●视图类
17
1.AppWizard向导生成的类和文件
●单击项目工作区的ClassView标签,则显示
CMainFrame、CMyWinPApp、CMyWinPDoc和 CMyWipView等,这是应用程序MyWinP的全部类。 ●利用AppWizard向导创建应用程序框架时,产生 的各派生类将被创建单独的源文件。 ●单击某一类名(如CMyWinPView)前的“+”号, 则列出该类的成员函数,双击类名或成员函数名 (如GetDocument),则源代码编辑区显示出该类或 该成员函数的实现代码。
27
DrawText函数
DrawText函数是CDC类用于文本输出的成员 函数之一,它的作用是在指定矩形区域内以当前 字体、颜色等属性及指定的显示方式显示字符串。 DrawText函数的格式如下:
形式一: virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat ); 形式二: int DrawText(const CString&str, LPRECT lpRect, UINT nFormat );
6
定时消息
●定时消息也是Windows的一类重要消息。
●当需要应用程序每隔一个指定的时间间隔便执行某
一特定操作时,就需要使用定时消息WM_TIMER。
●在进行定时操作时,用户需要调用SetTimer函数创建
一个定时器,并设置定时器的事件标志nIDEvent及时 间间隔nElapse,然后编写消息WM_TIMER的消息处 理函数OnTimer(),实现定时操作。
5
控件通知消息
●控件通知消息是指当控件的状态发生改变时,控件 向其父窗口发送的消息。 ● MFC对控件通知消息的传递方式与其他以WM开 头的Windows消息一样,但BN_CLICKED例外,该 消息的传递方式与命令消息的传递机制相同。
●对于Windows消息和控件通知消息,MFC将消息传 递给相应的窗口处理。
20
(2)主框架架窗口类
●CMyWinP 应 用 程 序 的 主 框 架 窗 口 类 名 为 CMainFrame,它由CWnd的一个子类派生而来, 该子类即CFrameWnd。 ●CMainFrame类的声明在头文件MainFrame.h 中,类的实现在文件MainFrame.cpp中。 ●CMainFrame类管理主框架窗口,并拥有一 些如菜单、工具栏和状态栏等控件,同时,它 还扮演转发菜单和工具栏消息的角色。
8
2 MFC消息映射机制
●消息映射是指将消息与处理函数相联系,即 当系统产生一条消息时,它能找到处理该消息 的函数。
●消息映射是Windows基于消息映射的事件驱 动机制的重要内容之一。
9
Visual C++的消息映射宏
消息映射宏 DECLARE_MESSAG E_MAP BEGIN_MESSAGE_ MAP END_MESSAGE_M AP ON_COMMAND ON_COMMAND_RA NGE 功 能 在头文件中使用,用于声明在源文件中存在消息 映射 表示消息映射的开始,用于源代码文件中 表示消息映射的结束,用于源代码文件中 将特定的命令消息映射到类的成员函数,即使用 该成员函数处理消息 将一组特定的命令消息映射到类的成员函数
3
1. MFC消息种类
消息机制是 Windows应用程序的核 心,MFC中的消息可以分为: ● Windows消息 ●控件通知消息 ●定时消息 ●命令消息
4
Windows消息
● Windows消息通常指以WM开头的消息, 但WM_COMMAND除外。 ●键盘消息和鼠标消息都属于Windows消 息,Windows消息由窗口和视图进行处 理。 ● Windows消息通常带有若干个参数传递 给消息处理函数,这些参数为处理函数 正确地处理消息提供了充分的信息。
10
消息映射宏
Visual C++的消息映射分为两个方面:
●一是在头文件.h中处理 ●一是在实现文件.cpp中处理
11
消息映射举例
以上一章所创建的应用程序 MyWinP为例,打开该应用程序 源代码,其中有以下关于消息映 射的代码(见下页)。
12
在头文件MyWinp.h中的消息映射代码
//{{AFX_MSG(CMyWinPApp) afx_msg void OnAppAbout(); //NOTE-the ClassWizard will add and remove member functions //}}AFX_MSG DECLARE_MESSAGE_MAP()
18
观察应用程序MyWinP 的类和文件
19
(1)应用程序类
●MyWinP程序的应用程序类名为 CMyWinPApp ,由CwinApp类派生而来。 ●该类的每一个对象代表一个应用程序,程序 中默认定义一个全局对象theApp。 ●CMyWinPApp类的功能是管理整个应用程序, 负责程序的启动、初始化、窗口的创建以及从 Windows中获取消息并将消息分发到适当的目 的地。CMyWinPApp类的声明在头文件 MyWinPApp.h中,类的实现在CMyWinPApp.cpp 中。
cbitmapbutton控件cchecklistbox控件cdraglistbox控件cprogressctr控件cstatusbar控件等84控件mfc类简要说明静态文本控件cstatic用于为其他控件显示文本标签图形控件cstatic用于显示图标编辑框控件cedit用于文本输入的控件组框控件ccombobox将列表框和编辑框控件有机组合按钮控件cbutton用于执行命令单选按钮cbutton用于对互相排斥的选项进行选择复选框cbutton用于选择多个独立的选项水平滚动条控件cscrollbar提供水平滚动功能垂直滚动条控件cscrollbar提供垂直滚动功能列表框控件clistbox以列表的方式给用户提供选择85一般情况下利用visualc资源编辑器创建控件的步骤如下
7
命令消息
●命令消息是来自于用户界面对象的 WM_COMMAND消息。 ●包括菜单、工具栏按钮和加速键都属于命令消息 等。即每当用户选择一个菜单项、单击一个按钮 或需要告诉操作系统应当执行什么操作时,则发 送一条WM_COMMAND命令消息。
● WM_COMMAND 消 息 的 消 息 映 射 宏 为 OnCommand()。所有命令消息都包含有一个相同 类型的参数,即该命令消息需要操作的资源ID值, 由ID值映射消息处理函数。
29
TextOut函数
●TextOut函数也是CDC类用于文本输出的成员函数,