实验3 Wiondows程序设计与MFC编程基础.ppt
《实验3 Wiondows程序设计与MFC编程基础.ppt》由会员分享,可在线阅读,更多相关《实验3 Wiondows程序设计与MFC编程基础.ppt(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验三 Windows程序设计 与MFC编程基础outlineWindows编程基础Windows编程的概念Windows应用程序的基本结构利用Windows API函数编写Windows应用程序MFC程序设计框架MFC类基础利用向导建立一个MFC应用程序框架MFC消息处理机制键盘、鼠标和自定义消息的处理。outlineWindows编程基础 Windows编程的概念 Windows应用程序的基本结构利用Windows API函数编写Windows应用程序MFC程序设计框架MFC类基础利用向导建立一个MFC应用程序框架MFC消息处理机制键盘、鼠标和自定义消息的处理。u Windows 操作系统
2、是一个多任务、面向对象的图形操作系统。u 在Windows 操作环境中,Windows 应用程序采用“基于消息的事件驱动”运行机制,这是它与过去的面向过程的应用程序机制的不同之处。面向过程的编程方式:程序执行的流程遵从程序员预先规定的路径。面向对象的Windows程序执行顺序取决于:事件和消息发生的顺序。u Windows应用程序设计的重点:编写事件和消息的处理程序。Windows 编程基础Windows程序与DOS程序的不同p DOS程序基于DOS的系统功能调用,在DOS或仿真DOS环境下运行,无视Windows的存在,不能调用Windows的强大功能。p DOS程序运行时可以认为自己独占的
3、全部计算机资源(硬件+软件),且是连续执行直至结束,没有其他程序能同时运行。p Windows程序接受操作系统的调度,对资源的占用和访问也受到操作系统的限制,运行期间与操作系统的互动是主要的,函数间的相互调用不是主流。主函数也不直接调用子函数。p Windows程序是“消息驱动”的。程序中包含若干平行的“消息响应函数”,这些函数不被主函数调用,相互之间也没有调用关系,而是在消息到来时由窗口过程选择调用。p Windows程序的主函数是WinMain(),源代码框架与DOS程序有极大不同。p 如果使用MFC编写Windows程序,则WinMain()作为MFC的库函数被隐藏起来,一个CWinAp
4、p派生类的全局对象的InitInstance()和Run()成员函数分担了WinMain()的功能。p 窗口过程也是隐藏的,用户不需要编写,但是被窗口过程调用的一系列消息响应函数需要用户重载和编辑。p Windows程序的组成 一个主函数WinMain()一个窗口过程(习惯上被命名为WndProc,但不是硬性规定)若干消息响应函数 若干常规函数Windows程序与DOS程序的不同编写Windows应用程序必须首先了解以下内容:(1)窗口的概念 (2)事件驱动的概念(3)消息 (4)句柄 编写Windows程序相当一部分工作是在创建对象和为对象属性赋值对象特征:具有规范形态和操作模式编程方法传统
5、编写法-API交互式方法-MFCWindows编程的概念对象是Windows的规范部件窗口菜单按钮对话框程序模块一个应用程序的窗口一般包含下列组成部分:窗口边界工作区控制菜单框下拉菜单水平滚动条垂直滚动条最大化按钮最小化按钮标题栏窗口窗口是由应用程序创建的一个用于接收用户输入和显示输出的矩形区域。是系统管理应用程序的基本单位。窗口由“非客户区”和“客户区”组成。非客户区由系统绘制,包括菜单、工具栏、最大化按钮等。客户区由应用程序绘制,用于输出数据和接受用户的输入。编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处
6、理与数据交换的过程。窗口oWindows程序设计是针对事件或消息的处理进行。oWindows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。oWindows对消息有一套严格的定义,并在其产生时将其发送给所有相关的应用程序,这些消息用于驱动应用程序运行以实现一定的功能。消息是描述事件发生的信息如按下鼠标或键盘事件驱动消息驱动机制派送消息消息源1消息源2消息源n否程序开始程序结束捕获消息是否退出消息是处理消息消息驱动机制消息A响应消息B响应消息C响应硬件软件缺省窗口过程消息消息的含义消息来源消息队列消息的结构消息是关于所发生的事件的
7、通知.事件是一个动作,如按下鼠标、选择菜单输入消息、控制消息系统消息、用户消息USER用户交互内核 来管理消息的含义oWindows应用程序的结构是基于消息驱动模型,程序的任何一个动作都是在收到一条消息后发生的,如:WM_KEYDOWN WM_LBUTTONDOWN WM_KEYUP WM_CHAR WM_PAINT WM_COMMAND等,每条消息都可以带有参数(wParam,lParam)。o大部分的消息都关联到某个窗口,每个窗口都有一个消息处理过程(函数),属于某个窗口的消息都将由相应的消息处理过程来处理。o每个Windows应用程序都有一个消息队列,Windows系统会把属于各个应用程
8、序的消息放入各自的消息队列,应用程序不断地从自己的消息队列中获取消息并把它们发送到相应窗口处理过程。这个循环(取消息-处理消息)一直到用户以某种方式(如:关闭应用程序的主窗口)结束程序而终止。下面给出了Windows应用程序的一个框架:消息队列 应用程序1窗口函数WndProc消息映射默认窗口函数DefWndowProcApp1消息队列 App2消息队列 App3消息队列 系统队列输入消息系统消息postpostMessageMessageSendSendMessageMessageUSER用户交互内核消息的结构消息号:由事先定义好的消息名标识字参数(wParam),长字参数(lParam):
9、用 于提供消息的附加信息消息附加信息与具体消息号的值有关typedef struct tagMSG HWND hwnd;/接收消息的窗口句柄,为null可检索所有驻留在消息队列中的消息 UINT message;/消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam;/32位消息附加信息,不同消息其值有所不同 LPARAM lParam;DWORD time;/指定消息送至队列的时间 POINT pt;/指定消息发送时屏幕光标位置,数据类型POINT是一个结构体 MSG;typedef struct tagPOINT LONG x;LONG y;POINT;常用句柄类
10、型及其说明句柄是一个4字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例窗口按钮图标滚动条输出设备控制文件应用程序通过句柄访问相应的对象信息HWND窗口句柄HDC 设备环境句柄HBITMAP位图句柄HCURSOR 光标句柄HICON图标句柄HFONT 字体句柄HMENU菜单句柄HPEN 画笔句柄HFILE文件句柄HBRUSH画刷句柄HINSTANCE当前实例句柄句柄outlineWindows编程基础Windows编程的概念 Windows应用程序的基本结构 利用Windows API函数编写Windows应用程序MFC程序设计框架MFC类基础利用向导建立一个MFC应用程序框架M
11、FC消息处理机制键盘、鼠标和自定义消息的处理。一个完整的Windows应用程序通常由五种类型的文件组成。应用程序的组成Windows应用程序的基本结构一个windows应用程序常具有以下特性:(1)消息驱动机制 (2)图形设备界面(GDI)(3)基于资源的程序设计 (4)动态链接库1.C语言源程序文件2.头文件3.模块定义文件4.资源描述文件5.项目文件入口函数WinMain窗口函数WndProcWindows应用程序构成基本框架包含各种数据类型、数据结构与函数等源程序组成结构WinMain函数 三个基本的组成部分:函数说明、初始化和消息循环功能注册窗口类,建立窗口及执行必要的初始化进入消息循
12、环,根据接受的消息调用相应的处理过程当消息循环检索到WM_QUIT时终止程序运行WinMain()函数,相当于main()WndProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。WndProc包含了对各种可能接收到的消息的处理过程定义了应用程序对接收到的不同消息的响应窗口函数WndProc和消息处理开始执行初始化应用初始化和创建应用窗口进入消息循环并从消息队列得到一个消息当前消息是否WM_QUIY?终止执行程序是否定义了对此消息的处理进行默认处理处理消息NNYYWindows应用程序的执行
13、过程MSG:包含一个消息的全部信息,是消息发送的格式WNDCLASS:包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的X和Y坐标RECT:定义了一个矩形区域及其左上角和右下角的坐标几种重要的结构一些重要的数据结构在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型数据类型数据类型识别字 含义HINSTANCE 执行实体(程序自身)句柄HWND 窗口句柄HDC 设备上下文(设备环境)句柄它们都是宏,真实类型均为unsigned int。其它宏识别字 含义LOWROD(x)长整数的低16位HIWROD(x)长整数的高16位RGB(r,g,b)用三个颜
14、色分量字节合成一个32位色彩值GetRValue(c)取色彩的红色分量 GetGValue(c)取色彩的绿色分量 GetBValue(c)取色彩的蓝色分量 匈牙利表示法Windows程序员普遍使用一种叫做“匈牙利表示法”的变量命名通则。这是为了纪念传奇性的Microsoft程序写作者Charles Simonyi。变量名以一个或者多个小写字母开始,这些字母表示变量的数据类型。例如,szCmdLine中的sz代表以0结尾的字符串;hInstance和hPrevInstance中的h字首表示句柄;iCmdShow中的i字首表示整数。wParam中的w字首表示word,即unsigned short
15、lParam中的l字首表示long从Win95开始,WPARAM也是long类型,但保留原名称。在命名结构变量时,可以用结构名(或者结构名的一种缩写)的小写作为变量名的字首,或者用作整个变量名。例如,msg变量是MSG结构;wndclass是WNDCLASSEX结构;ps是一个PAINTSTRUCT结构,rect或rc是一个RECT结构;,等等。匈牙利表示法便于帮助程序员及早发现并避免程序中的错误。由于变量名既描述了变量的作用,又描述了其数据类型,就比较容易避免产生数据类型不合的错误。应当注意到,匈牙利表示法中还用到了“驼峰表示法”。常见的前缀(约定,并非规定)字首 数据类型c char或WC
16、HAR或TCHARby BYTE(unsigned char)n shorti intx,y int,用作x座标和y座标cx,cy int,用作宽度和高度;其中c代表计数器b或f BOOL(bool);f代表标志w WORD(unsigned short)l LONG(long)dw DWORD(unsigned long)fn function(函数)s string(字符串)sz以0结尾的字符串,多见用lpszh 句柄(handle)p或lp 指针(long pointer32位指针4G内存空间)常见的前缀(约定)字首 数据类型u unsignedstr CStringm_ 成员变量(me
17、mber)d doublef float(与前面约定为bool冲突,视个人习惯)m_list CListBox(列表框)控件型成员变量m_combo CComboBox(组合框)控件型成员变量m_list CListCtrl(列表)控件型成员变量,为防止冲突,可用 m_listbox或m_lb表示CListBoxm_edit CEdit(文本框)控件型成员变量m_str CString型成员变量outlineWindows编程基础Windows编程的概念Windows应用程序的基本结构利用 Windows API编写Windows应用程序 MFC程序设计框架MFC类基础利用向导建立一个MFC应
18、用程序框架MFC消息处理机制键盘、鼠标和自定义消息的处理。程序入口int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)/填写并注册窗口类,见下1页 /创建并显示窗口 ,见下2页 /启动消息循环 ,见下3页 return 0;/结束程序注册窗口类WNDCLASS wndcls;wndcls.cbClsExtra=0;wndcls.cbWndExtra=0;wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
19、wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);wndcls.hIcon=LoadIcon(NULL,IDI_INFORMATION);wndcls.hInstance=hInstance;wndcls.lpfnWndProc=WindowProc;wndcls.lpszClassName=Hello MFC!;wndcls.lpszMenuName=NULL;wndcls.style=CS_HREDRAW|CS_VREDRAW;RegisterClass(&wndcls);创建窗口HWND hwnd;hwnd=CreateWindow(Hello MFC!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验3 Wiondows程序设计与MFC编程基础 实验 Wiondows 程序设计 MFC 编程 基础
限制150内