您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 绩效管理 > 1-MFC Windows程序设计1
四川理工学院计算机学院软件工程系主讲教师主讲教师主讲教师主讲教师::::袁超袁超袁超袁超2011-10-3第第第第1章章章章Windows应用程序基础知识应用程序基础知识应用程序基础知识应用程序基础知识Windows是一种应用于微型计算机的操作系统,它为应用程序提供了一个多任务环境,这个环境具有一致的图形化窗口和菜单。在Windows操作系统上运行的应用程序叫做Windows应用程序应用程序应用程序应用程序。本章主要内容本章主要内容本章主要内容本章主要内容::::·Windows应用程序的基本概念。·Windows应用程序中的数据类型。·Windows应用程序的消息机制。·Windows操作系统与应用程序的主函数、窗口函数之间的关系。·Windows应用程序的函数封装。1111....1Wind1Wind1Wind1Windowsowsowsows应用程序的基本概念应用程序的基本概念应用程序的基本概念应用程序的基本概念1111....1111....1Wind1Wind1Wind1Windowsowsowsows应用程序的界面应用程序的界面应用程序的界面应用程序的界面Windows应用程序的一个突出特点应用程序的一个突出特点应用程序的一个突出特点应用程序的一个突出特点是它有一个美观的图形用户界面(GUI),参见图1-1。这种图形用户界面与键盘和鼠标的配合,大大方便了用户对应用程序的控制与操作。仔细观察这个图形界面图形界面图形界面图形界面,可以发现它是由许多不同的图形元素组成的,其中某些图形元素在接受了用户的某个动作后,可以使程序执行某种相应的操作。例如例如例如例如,用鼠标单击工具条最左边的按钮,程序就会建立一个新的文件;而单击工具条上带有软磁盘图标的按钮,程序就会把当前文件存盘等。显然,这个图形界面是Windows应用程序与用户交换信息的一个“窗口窗口窗口窗口”。简单的Windows应用程序只有一个窗口,而复杂的Windows应用程序可能有多个窗口。设计一个或一组满足要求的窗口,是Windows应用程序设计中的一项重要任务。1111....1111....2Wind2Wind2Wind2Windowsowsowsows程序与程序与程序与程序与APAPAPAPIIII函数函数函数函数Windows是一种操作系统,以Windows作为平台运行的应用程序就叫做Windows应应应应用程序用程序用程序用程序。图1-1Windows应用程序的图形窗口界面Windows提供了大量可以在应用程序中调用的,用C语言编写的函数。这些由操作系统提供的,用户可以使用的函数就叫做API(applicationprogramminginterface)函数函数函数函数。WindowsAPI函数加上C运行库函数,给在Windows进行C编程提供了强大的支持。根据WindowsAPI函数函数函数函数的功能,大体上可把它们分为以下三大类型三大类型三大类型三大类型。(1)窗口管理函数:实现窗口的创建、移动和修改等功能。(2)图形设备函数:实现图形的绘制及操作功能,这类型函数的集合又叫做图形设备接口。(3)系统服务函数:实现与操作系统有关的一些功能。早期,用来设计Windows应用程序的开发工具是软件开发工具包(softwaredevelopmentkit,SDK),使用软件开发工具包来设计使用软件开发工具包来设计使用软件开发工具包来设计使用软件开发工具包来设计Windows应用程序应用程序应用程序应用程序,实际上就是直接使用API函数来开发应用程序。由于用这种方法来设计Windows应用程序需要程序员记忆和掌握大量的API函数,所以使得这种工作做起来极其困难和乏味,从而阻碍了Windows应用程序的推广。自从出现了面向对象程序设计方法以来,人们用类这种数据类型对WindowsAPI函数进行了封装,从而使Windows应用程序结构和开发工具都发生了巨大的变化。目前,用来设计Windows应用程序的开发工具大多是“面向对象面向对象面向对象面向对象”而且是“可视可视可视可视”的,例如,VisualC++、VisualBasic、VisualJava、C++Builder等。由于这些可视化的开发工具可以大幅度提高Windows程序的开发效率,因而得到了广泛的应用。但是,作为Windows应用程序设计人员,不管使用哪种开发工具,了解一些早期早期早期早期Windows应用程序设计的方法应用程序设计的方法应用程序设计的方法应用程序设计的方法是必要的。1111....1111....3Wind3Wind3Wind3Windowsowsowsows的一个特殊数据类型的一个特殊数据类型的一个特殊数据类型的一个特殊数据类型————————句柄句柄句柄句柄在Windows应用程序中,存在着很多诸如窗口、按钮、滚动条等复杂的程序对象和实例。为了在程序中区分和使用它们,必须对它们进行标识。为了区别于普通变量的标识,Windows把这种复杂对象的标识叫做“句柄句柄句柄句柄”。不同Windows对象的句柄具有不同的类型,常用的句柄类型见表1—1。表1-1常用的句柄类型句柄类型说明句柄类型说明HWND窗口句柄HDC图形设备环境句柄HINSTANCE当前程序应用实例句柄HBITMAP位图句柄HCURSOR光标句柄HICON图标句柄HFONT字体句柄HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄1111....1111....4Wind4Wind4Wind4Windowsowsowsows应用应用应用应用程序的数据类型程序的数据类型程序的数据类型程序的数据类型Windows应用程序中的数据量非常大,为了提高应用程序的可读性,Windows给许多给许多给许多给许多基本数据类型定义了别名基本数据类型定义了别名基本数据类型定义了别名基本数据类型定义了别名,例如例如例如例如:typedefunsignedlongDWORD;typedefintBOOL;typedefunsignedcharBYTE;typedefunsignedshortWORD;typedeffloatFLOAT;typedefunsignedintUINT;除此之外,Windows应用程序还使用了一些结构类型的数据应用程序还使用了一些结构类型的数据应用程序还使用了一些结构类型的数据应用程序还使用了一些结构类型的数据,例如例如例如例如:typedefstructtagPOINT{LONGx,y;)POINT;结构描述了一个点的位置。再如:typedefstructtag_RECT{LONGleft;LONGtop;LONGright;LONGbottom;}RECT;描述了一个矩形等。在Windows应用程序设计中,既可以使用C的基本数据类型.也可以使用Windows自定义的数据类型。但要注意,凡是Windows自定义数据类型的关键字都要大写自定义数据类型的关键字都要大写自定义数据类型的关键字都要大写自定义数据类型的关键字都要大写。1111....1111....5555消息与消息循环消息与消息循环消息与消息循环消息与消息循环1.事件与消息Windows应用程序的另一个突出特点应用程序的另一个突出特点应用程序的另一个突出特点应用程序的另一个突出特点是在程序启动并创建了程序窗口之后,随即就进入了一个等待状态(利用一个while循环),直到接收到了某种刺激(例如,键盘输入,鼠标的单击或双击)之后,程序才会脱离等待状态对这个刺激进行处理,而处理完毕后又进入等待状态。这些有可能触发计算机程序做出相应反应的刺激,叫做“事件事件事件事件。为了描述事件的各种信息(例如,何地、何时发生了何种事件等),Windows定义了一个结构,这个结构就叫做“消息消息消息消息(message)。消息结构的定义消息结构的定义消息结构的定义消息结构的定义如下:typedetstructtagMbG{HWNDhwnd;//产生消息的窗口句柄UINTmessage;//消息的标识码WPARAMwParam;//消息的附加信息1LPARAMlParam;//消息的附加信息2DWORDtime;//消息进入消息队列的时刻POINTpt;//表示发送该消息时光标的位置}MSG;这样,当计算机系统发生某种事件时,Windows系统会把该事件的相关信息填写到MSG结构的各个域中,并设法把这个消息送达到应用程序,而应用程序则根据消息中的窗口句柄}hwnd和消息标识码message来确定由哪个窗口中的哪一段代码来处理这个消息。Windows系统已经把绝大多数事件的消息事先进行了定义,并定义了对消息的标识码。表1—2列举了常用Windows消息的一部分。表1-2部分常用的Windows消息消息的标识说明WM_LBUTTONDOWN按下鼠标左键时产生的消息WM_LBUTTONUP放开鼠标左键时产生的消息WM_RBUTTONDOWN按下鼠标右键时产生的消息WM_RBUTTONUP放开鼠标右键时产生的消息WM_LBUTTONDBLCLK双击鼠标左键时产生的消息WM_RBUTTONDBLCLK双击鼠标右键时产生的消息WM_CHAR按下非系统键时产生的消息,其中wParam为键的ASCII码WM_CREATE由CreateWindow()函数产生的消息WM_CLOSE关闭窗口时产生的消息续表消息的标识说明WM_DESTROY消除窗口时产生的消息WM_QUIT退出程序时,由PostQuitMessage()函数产生的消息WM_PAINT需要窗口重画时产生的消息2.消息循环系统为每个应用程序都建立了一个叫做消息队消息队消息队消息队列列列列的存储空间,在程序的运行过程中如果发生了一个事件,Windows就会把这个事件所对应的消息送人消息队列等待使用。应用程序可以通过调用Windows提供的API函数GetMessage()从消息队列中获取消息。并利用GetMessage()函数的返回值(当获得消息时,该函数返回TRUE,否则返回FALSE)组织一个循环,从而可以不断从消息队列获取消息,一旦获取了一个消息,就把这个消息发送给系统(注意,不是把消息发送给应用程序,而是发送给系统!)。这个循环叫做消息循环消息循环消息循环消息循环,在Windows应用程序中,消息循消息循消息循消息循环的代码环的代码环的代码环的代码如下:while(GetMessage(&msg,NULL,NULL,NULL){TranslateMessage(&msg);DispatchMessage(&msg);//把消息派送给系统}当函数函数函数函数DispatchMessage()把消息派送给系统后,系统会根据消息中的hwnd找到应该接收消息的程序窗口,并根据窗口提供信息,以消息为参数来调用一个用户编写的叫做“窗口函数”的函数。在窗口函数中,以消息中的消息标识message为依据查找并执行该消息所对应的程序段,对消息进行处理。处理完毕后,只要该消息不是终止应用程序消息,则会立即返回消息循环,以等待获取下一个消息。Windows应用程序就这样周而复始进行循环,直至用户发出结束应用程序的消息。至于消息循环中的TranslateMessage()函数函数函数函数,它的作用是把键盘消息翻译成字符消息。正是由于Windows应用程序必须接受了消息才会启动某种操作,因此人们常说:Windows应用程序的运行是消息驱动的应用程序的运行是消息驱动的应用程序的运行是消息驱动的应用程序的运行是消息驱动的(或者说是事件驱动的或者说是事件驱动的或者说是事件驱动的或者说是事件驱动的)。Windows程序这种以用户为主导的运行方式,普遍受到了人们的欢迎。在Windows中,从消息的传输途径上来看,消息大体上分为两种:一种是先把消息送达消息队列,然后由应用程序中的消息循环通过函数DispatchMessage()获取并通过系统发送给窗口,这类型消息叫做队列消息队列消息队列消息队列消息,鼠标和键盘消息为队列消息;另一种消息则
本文标题:1-MFC Windows程序设计1
链接地址:https://www.777doc.com/doc-6419967 .html