交互式绘图软件开发设计

上传人:小** 文档编号:56532081 上传时间:2018-10-13 格式:PPT 页数:79 大小:2.31MB
返回 下载 相关 举报
交互式绘图软件开发设计_第1页
第1页 / 共79页
交互式绘图软件开发设计_第2页
第2页 / 共79页
交互式绘图软件开发设计_第3页
第3页 / 共79页
交互式绘图软件开发设计_第4页
第4页 / 共79页
交互式绘图软件开发设计_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《交互式绘图软件开发设计》由会员分享,可在线阅读,更多相关《交互式绘图软件开发设计(79页珍藏版)》请在金锄头文库上搜索。

1、2018/10/13,1,前言,什么是Windows编程?,1. 你编写的程序是否遵循了Windows的编程模型?,2.是否调用了Windows操作系统的应用程序编程接口函数API,或者对其封装后的基础类库(如MFC)。,2018/10/13,2,前言,关于Windows编程的三个问题,1. 什么是Windows API?,2. 什么是MFC?,3. 为什么要使用MFC?,2018/10/13,3,前言,1. 什么是 Windows API?,从Windows应用程序,操作系统,计算机硬件之间的相互关系开始说起,应用程序的机能就是:通知操作系统控制计算机硬件,执行某个具体的动作,完成特定的功能

2、。,例如:操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。,那么,应用程序是如何通知操作系统执行某个功能的呢?,2018/10/13,4,前言,1. 什么是 Windows API?(续),有过编程经验的同学都应该知道,在传统应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,Windows应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。,操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数

3、的集合就是Windows应用程序编程接口(Application Programming Interface),简称Windows API。,如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。,2018/10/13,5,前言,1. 什么是 Windows API?(续),Windows编程的本质:,利用Windows API 函数编写应用程序,让操作系统完成某种特定的功能 。,Windows/System32/Kernel32.dll、 USER32.dll、GDI32.dll,Windows API 函数在哪里?,怎

4、样使用Windows API? C和Windows SDK开发包( API函数是用纯C写的,都在windows.h中有声明),然而如今,C+取代了C,成为专业Windows程序员首选的语言,所以MFC横空出世了,2018/10/13,6,前言,2. 什么是 MFC?,MFC英文全称为Microsoft Foundation Classes (微软基础类库),是把Windows API进行封装的类库,它是一个类的集合,通过覆盖Windows API,为编程提供了一个面向对象的界面。MFC使Windows程序员能够利用C+面象对象的特性进行编程。,2018/10/13,7,前言,3. 为什么要使用

5、MFC?,可重用性 封装后使方法和属性更紧密的捆绑 常用的功能自动化,减少编写代码的数量 提供应用程序的框架结构框架结构提供了抽象功能,它远远超出了Windows API的功能。例如:MFC的文档/视图体系结构在API上建造了一个功能强大的基础结构,它把程序中数据的图形表示(或称为视图)与数据本身分开。这种抽象对API而言完全是陌生的,而且在MFC框架结构之外或类似的类库中也不存在。,2018/10/13,8,关于教材,参考书籍(Windows 编程四大法宝),VC深入详解孙鑫著 电子工业出版社,深入浅出MFC(第二版)侯俊杰著 华中科技大学出版社,Windows程序设计(第五版)Charle

6、s Petzold著 北京大学出版社( Microsoft Press ),Visual C+技术内幕(第四版)David J. Kruglinski著 清华大学出版社( Microsoft Press ),2018/10/13,9,第一讲 Windows程序内部运行原理,2018/10/13,10,Windows 程序内部运行机制,Windows编程模型,事件驱动编程模型以消息为基础,事件驱动之,WM_PAINT,WM_KEYDOWN,WM_LBUTTONDOWN,消息响应,消息响应,消息响应,DefWindowProc,来源于操作系统的消息,消息队列,WinMain,消息循环,发送消息,窗

7、口过程,未处理的消息,应用程序,窗口,交还给操作系统,操作系统,实现特定功能,2018/10/13,11,Windows 程序内部运行机制,消息、消息队列、消息循环,应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息(消息通常与窗口相关)。例如,当我们按下鼠标左键的时候,将会产生消息,系统会将这个消息放到窗口所属的应用程序的消息队列中,等待应用程序的处理。产生的消息都会依次放到消息队列中,而应用程序则通过一个消息循环不断地从消息队列中取出消息,并进行响应。,2018/10/13,12,Windows 程序内部运行机制,消息响应与窗口过程,如用户在某

8、个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。对事件作出反应的过程就是消息响应,各种消息响应放在一起组成了窗口过程。,2018/10/13,13,Windows 程序内部运行机制,Windows API 中消息的定义,操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。 MSG结构定义如下: typedef struct

9、 tagMSG HWND hwnd; UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt; MSG;,2018/10/13,14,Windows 程序内部运行机制,小小知识点“句柄”,句柄(HANDLE),资源的标识。操作系统要管理和操作各种各样的资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。,2018/10/13,15,

10、Windows 程序内部运行机制,小小知识点API中对数据类型的宏定义,好处:让数据类型具备语义信息,从变量的类型就可以区分变量的用途!,int x, y; x = 30; y = 30; /x和y既可以用来表示坐标点,也可以用来表示宽度和高度,还可以用来表示身高和体重。typedef int WIDTH typedef int HEIGHT WIDTH x; HEIGHT y; /我们从变量的类型上就可以知道x和y是用来表示宽度和高度。,2018/10/13,16,Windows 程序内部运行机制,编写Windows应用程序的要素,消息响应,消息响应,消息响应,DefWindowProc,W

11、inMain,消息循环,发送消息,窗口过程,未处理的消息,应用程序,1 入口函数WinMain 2 创建窗口 3 消息循环与发送消息 4 窗口过程与消息响应,消息,窗口,2018/10/13,17,Windows 程序内部运行机制,1.入口函数WinMain,int WINAPI WinMain(HINSTANCE hInstance, / 当前应用程序实例句炳HINSTANCE hPrevInstance, / 永远为NULLLPSTR lpCmdLine, / 命令行参数int nCmdShow / 窗口显示时的状态 );,2018/10/13,18,Windows 程序内部运行机制,2.

12、 创建窗口,创建一个完整的窗口需要经过下面四个操作步骤:Step1: 设计一个窗口类;Step2: 注册窗口类;Step3: 创建窗口;Step4: 显示及更新窗口。,2018/10/13,19,Windows 程序内部运行机制,设计窗口类,typedef struct _WNDCLASS UINT style; /窗口类样式WNDPROC lpfnWndProc; /窗口过程函数指针int cbClsExtra; /窗口类附加内存字节数,通常为0int cbWndExtra; /窗口附加内存字节数,通常为0HANDLE hInstance; /应用程序实例句柄HICON hIcon; /标题

13、栏图标HCURSOR hCursor; /光标HBRUSH hbrBackground; /窗口背景颜色LPCTSTR lpszMenuName; /菜单资源名称LPCTSTR lpszClassName; /窗口类名称 WNDCLASS;,2018/10/13,20,Windows 程序内部运行机制,创建窗口,HWND CreateWindow( LPCTSTR lpClassName, / 已注册的窗口类名称LPCTSTR lpWindowName, / 窗口标题栏中显示的文本 DWORD dwStyle, / 窗口样式int x, / 水平坐标 int y, / 垂直坐标 int nWi

14、dth, / 宽度int nHeight, / 高度HWND hWndParent, / 父窗口句柄 HMENU hMenu, / 菜单句柄 HINSTANCE hInstance, / 应用程序实例句柄 LPVOID lpParam / 用于多文档程序的附加参数,单文档为NULL);,2018/10/13,21,Windows 程序内部运行机制,3. 消息循环与发送消息,MSG msg;while (GetMessage( /将消息发送到“窗口过程”,2018/10/13,22,Windows 程序内部运行机制,GetMessage,BOOL GetMessage(LPMSG lpMsg, / 消息结构体指针,返回消息信息 HWND hWnd, / 窗口句柄 ,通常设为NULLUINT wMsgFilterMin, / 消息过滤最小值 UINT wMsgFilterMax / 消息过滤最大值 );,GetMessage从线程的消息队列中取出消息,取出的消息保存在事先定义好的消息的结构体对象中。GetMessage函数取到除WM_QUIT外的消息均返回非零值,只有在接收到WM_QUIT消息时,才返回0。什么时候才会收到WM_QUIT呢?(见窗口过程),2018/10/13,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号