L07_MFC可视化编程.ppt
《L07_MFC可视化编程.ppt》由会员分享,可在线阅读,更多相关《L07_MFC可视化编程.ppt(71页珍藏版)》请在一课资料网上搜索。
1、Welcometotheclass 面向对象程序设计BObjectOrientedProgrammingB 面向对象程序设计BVC可视化编程 JianjunHuang VC可视化编程 目标 了解Windows应用程序的基本流程 理解VC事件驱动机制 掌握创建GUI应用程序方法 VC可视化编程 基本应用程序的建立 视窗基础应用程序一个基于MFC应用程序MFC向导建立应用程序 Windows应用程序的基本流程 视窗基础应用程序 基本应用程序的建立 如何建立一个视窗应用程序 基本应用程序的建立 例1一个简单的Windows应用程序主要步骤 新建一个空的Win32Application 添加C Sou
2、rceFile includeintWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 基本应用程序的建立 例1一个简单的Windows应用程序 includeintWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MessageBox NULL 你好 我的VisualC 世界
3、问候 0 return0 每一个C Windows应用程序都需要Windows h头文件 它还包含了其他的一些Windows头文件 这些头文件定义了Windows的所有数据类型 常用函数 数据结构和符号常量 基本应用程序的建立 例1一个简单的Windows应用程序 includeintWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 WinMainC 控制台应用程序以main函数作为进入程序
4、的初始入口点 但在Windows应用程序中 main主函数被WinMain函数取代 基本应用程序的建立 intWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow 参数 WinMain函数接收4个参数 这些参数都是在系统调用WinMain函数时 传递给应用程序的 hInstance 表示该程序当前运行的实例句柄 是一个数值标识 当程序在Windows下运行时 它唯一标识运行中的实例 注意 只有运行中的程序实例 才有实例句柄 一个应用程序可以运行多个实例 每运行一个实例 系统都会给该实
5、例分配一个实例句柄 并通过hInstance参数传递给WinMain函数 hPrevInstance 表示当前实例的前一个实例的句柄 通过查看MSDN我们可以知道 在Win32环境下 这个参数总是NULL 即在Win32环境下 这个参数不再起作用 lpCmdLine 是一个以空字符结尾的字符串 内容为命令行的参数 nCmdShow 指定程序的窗口应该如何显示 例如最大化 最小化 隐藏等 这个参数的值由该程序的调用者所指定 应用程序通常不需要去理会这个参数的值 WinMain函数前的修饰符WINAPI 其实就是 stdcall 基本应用程序的建立 例1一个简单的Windows应用程序 inclu
6、deintWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 MessageBox 一个显示消息框的API函数 基本应用程序的建立 例1一个简单的Windows应用程序程序问题 无窗口 没交互 如何增加窗口 加入交互功能 基本应用程序的建立 includeLRESULTCALLBACKWndProc HWND UINT WPARAM LPARAM 窗口消息处理函数声明intWINAPIWinM
7、ain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow HWNDhwnd 窗口句柄MSGmsg 消息WNDCLASSwndclass 窗口类wndclass style CS HREDRAW CS VREDRAW wndclass lpfnWndProc WndProc wndclass cbClsExtra 0 wndclass cbWndExtra 0 wndclass hInstance hInstance wndclass hIcon LoadIcon NULL IDI APPLICATION w
8、ndclass hCursor LoadCursor NULL IDC ARROW wndclass hbrBackground HBRUSH GetStockObject WHITE BRUSH wndclass lpszMenuName NULL wndclass lpszClassName HelloWin 窗口类名if RegisterClass 执行默认的消息处理 Windows应用程序的基本流程 基本应用程序的建立 程序改进 添加窗口窗口变量 WINCLASS结构类型structWNDCLASS UINTstyle WNDPROClpfnWndProc intcbClsExtra
9、intcbWndExtra HINSTANCEhInstance HICONhIcon HCURSORhCursor HBRUSHhbrBackground LPCSTRlpszMenuName LPCSTRlpszClassName 基本应用程序的建立 WNDCLASSwndclass wndclass style CS HREDRAW CS VREDRAW wndclass lpfnWndProc WndProc wndclass cbClsExtra 0 wndclass cbWndExtra 0 wndclass hInstance hInstance wndclass hIcon L
10、oadIcon NULL IDI APPLICATION wndclass hCursor LoadCursor NULL IDC ARROW wndclass hbrBackground HBRUSH GetStockObject WHITE BRUSH wndclass lpszMenuName NULL wndclass lpszClassName HelloWin 基本应用程序的建立 程序改进 添加窗口建立窗口 注册窗口RegisterClass建立窗口CreateWindow显示窗口ShowWindow更新窗口UpdateWindow 基本应用程序的建立 if RegisterCla
11、ss 更新窗口 消息循环消息不断地循环 接收 分发和处理 直到结束 基本应用程序的建立 进入消息循环 当从应用程序消息队列中检取的消息是WM QUIT时 则退出循环 while GetMessage 基本应用程序的建立 消息框循环提供交互 基本应用程序的建立 消息 事件 驱动机制系统或用户的不同动作 产生相应消息 通过对这些消息的处理 实现与用户进行交互 事件Events 消息Message 处理Process 例如 按下鼠标的左键WM LBUTTONDOWN消息消息的处理敲了一个字符键WM CHAR消息消息的 不 处理 消息驱动机制窗口过程函数 用于处理窗口消息 事件Events 消息Mes
12、sage 处理Process 基本应用程序的建立 LRESULTCALLBACKWndProc HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam switch message caseWM CREATE 窗口创建产生的消息return0 caseWM LBUTTONDOWN MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 caseWM DESTROY 当窗口关闭时产生的消息PostQuitMessage 0 return0 returnDefWindowProc hwnd message wParam lPa
13、ram 执行默认的消息处理 程序改进 添加窗口加入交互 消息 WM LBUTTONDOWN消息处理 MessageBox LRESULTCALLBACKWndProc HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam switch message caseWM CREATE 窗口创建产生的消息return0 caseWM LBUTTONDOWN MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 caseWM DESTROY 当窗口关闭时产生的消息PostQuitMessage 0 return0 returnD
14、efWindowProc hwnd message wParam lParam 执行默认的消息处理 事件驱动 1简单的Windows应用程序 程序运行后 单击鼠标左键 就会弹出一个对话框 基本应用程序的建立 消息驱动机制 事件Events 消息Message 处理Process 例如 按下鼠标的左键WM LBUTTONDOWN消息敲了一个字符键WM CHAR消息 LRESULTCALLBACKWndProc HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam switch message caseWM CREATE return0 caseWM CHA
15、R MessageBox NULL 你好 我的VisualC 世界 问候 0 return0 caseWM DESTROY 当窗口关闭时产生的消息PostQuitMessage 0 return0 returnDefWindowProc hwnd message wParam lParam 基本应用程序的建立 修改后程序如何变化 基本应用程序的建立 相似的鼠标消息还有 WM LBUTTONUP 放开鼠标左键时产生 WM RBUTTONDOWN 单击鼠标右键时产生 WM RBUTTONUP 放开鼠标右键时产生 WM LBUTTONDBLCLK 双击鼠标左键时产生 WM RBUTTONDBLCLK
16、 双击鼠标右键时产生 常用Windows程序消息 除各种鼠标响应消息 还定义了许多消息 键盘响应消息 菜单响应消息 控件响应消息 编辑框 组合框 按钮等 窗口消息 常用Windows程序消息 消息有严格的定义 通过前缀可对消息分类标识 如 WM窗口消息BM按钮控制消息EM编辑控制消息LB列表框控制消息窗口消息 WM CREATE WM CLOSE WM DESTROY WM QUIT WM PAINT 基本应用程序的建立 源程序组成 1 WinMain函数 2 添加窗口窗口类定义 窗口注册 建立 显示和更新 2 交互实现窗口消息处理函数 Win32应用程序有一条很明确的主线 首先进入WinMa
17、in函数 然后设计窗口类 注册窗口类 产生窗口 注册窗口 显示窗口 更新窗口 最后进入消息循环 将消息路由到窗口过程函数中去处理 遵循这条主线 在写程序时就有了一条很清晰的脉络 基本应用程序的建立 基本应用程序的建立 include includeLRESULTCALLBACKSDKWndProc HWND UINT WPARAM LPARAM 窗口过程intWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnCmdShow HWNDhwnd 窗口句柄MSGmsg 消息WNDCLASSwndcla
18、ss 窗口类wndclass style CS HREDRAW CS VREDRAW wndclass lpfnWndProc SDKWndProc wndclass cbClsExtra 0 wndclass cbWndExtra 0 wndclass hInstance hInstance wndclass hIcon LoadIcon NULL IDI APPLICATION wndclass hCursor LoadCursor NULL IDC ARROW wndclass hbrBackground HBRUSH GetStockObject WHITE BRUSH wndclas
19、s lpszMenuName NULL wndclass lpszClassName SDKWin 窗口类名if RegisterClass 执行默认的消息处理 基本应用程序的建立 若视窗应用程序越复杂 编码工作也必然越复杂 1989年微软公司成立ApplicationFrameworkGroup技术团队 主要编写出一个可以使Windows编程更加简便的运用程序框架 他们把这个应用程序框架叫做AFX 很多全局函数 结构和宏的标示符都被加上了AFX的前缀 AFX小组后更名为MFC小组 但Afx名字仍然保留 凡是以afx开头的函数都是MFC类库中定义的全局函数 在MFC类中可以随便调用 基本应用程
20、序的建立 MFCMicrosoftFoundationClass简称MFC把Windows编程规范中的大多数内容封装成为各种类 使程序员从繁杂的编程中解脱出来 提高了编程和代码效率 MFC将上述工作内容 进行了封装 创建视窗程序的基础类库 有了MFC 让程序员可以不用考虑窗口类的生成和注册等工作 主要关注交互方面 如在消息和消息处理函数 Windows程序基本动作 例如WinMain RegisterClass WindowProcedure等 都被隐藏在MFC之中 CWinApp Run成员函数负责传递应用程序的消息给相应的窗口 完成了windowsAPI中函数GetMessage Tran
21、slateMessage 和DispatchMessage 的功能 窗口程序相关的MFC类结构 CObject CWnd CCmdTarget CWinThread CFrameWnd CWinApp CCmdTarget通过封装一些属性和方法 提供了消息处理的架构 MFC中 任何可以处理消息的类都从它派生 针对每种不同的对象 MFC都包含了一些类对这些对象进行封装 每一组类都有一个基类 一个MFC应用程序 一个MFC程序 例2一个基于MFC的应用程序主要步骤 新建一个空的Win32Application 选择 工程 设置 General 标签 UseMFCinaSharedDLL 添加C S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- L07_MFC 可视化 编程
