第一讲windows程序设计57266详版课资

上传人:沈*** 文档编号:164099528 上传时间:2022-10-24 格式:PPT 页数:75 大小:2.06MB
收藏 版权申诉 举报 下载
第一讲windows程序设计57266详版课资_第1页
第1页 / 共75页
第一讲windows程序设计57266详版课资_第2页
第2页 / 共75页
第一讲windows程序设计57266详版课资_第3页
第3页 / 共75页
资源描述:

《第一讲windows程序设计57266详版课资》由会员分享,可在线阅读,更多相关《第一讲windows程序设计57266详版课资(75页珍藏版)》请在装配图网上搜索。

1、Windos程序设计概观1课堂优质主要内容n四大主流操作系统及其发展简史n了解API的必要性n窗口与消息机制nHelloWin程序2课堂优质一、四大主流操作系统及其发展简史nWindows(最流行、最成功)nLinux(开源最成功)nFreeBSD(最稳定)nMAC OS(图形界面最优秀)3课堂优质1.1 WindowsnWindows 1.0、2.0、3.0、3.1(Janus)、3.2nWindows 95(Chicago)nWindows 98(Memphis)nWindows Me(Millennium)nWindows NT3.1(Sparta)、3.5(Daytona)、4.0(I

2、mpala)nWindows 2000nWindows XPnWindows Server 2003 nWindows Vista(Longhorn)nWindows 7(Blackcomb)4课堂优质1985198719901992Windows1.0Windows2.0Windows3.0Windows3.11994Windows3.2Windows951998Windows982000WindowsNT 3.1WindowsNT 3.5WindowsMeWindowsNT 4.0Windows200020012003WindowsXPWindows20032006Windows Vist

3、a2009Windows 75课堂优质16位保护(3.0以上)/实模式消息机制独占式以程序员角度比较Windows的不同版本Windows 1.03.2Windows 95MeWindows NTXP16位/32位混合体保护/实模式(Me)消息机制抢占式32位保护模式消息机制抢占式6课堂优质1.2 LinuxLinux是由芬兰赫尔辛基大学的一个大学生Linus B.Trolls在1991年首次编写的。标志性图标是一个可爱的小企鹅。Linux是一种类Unix系统,Linus当时编写它的目的是为了替代一种名叫Minix的操作系统。Minix是由一个名叫Andrew Tannebaum的计算机教授编

4、写的,当时由于Unix是一个商业软件,其源代码是不能拿来进行教学的,Andrew教授就自己编写了一个系统用于教学。最初的Minix用一张软盘就能装下,麻雀虽小、五脏俱全,Minix具有一般操作系统的特征,它同时兼容Unix系统。Linux是目前唯一可免费获得的、为PC及的多个用户提供多任务、多进程功能的操作系统。一个可以从网上或其他途径自由获得的免费软件。安装Linux,不仅可以亲身体验成为系统管理员的个中滋味,为爱好者们了解世界上流行的UNIX操作系统提供了廉价的机会;还可以通过在网络上开放一些服务而建立自己的网站。7课堂优质Linux也分为很多种版本,现今比较流行的是:Turbo Linu

5、x、RedHat Linux、Slackware Linux,我国也有自己的Linux,其名称为红旗Linux。1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。至此,Linux的代码开发进入良性循环。很多系统管理员开始在自己的操作系统环境中尝试linux,并将修改的代码提交给核心小组。由于拥有了丰富的操作系统平台,因而Linux的代码中也充实了对不同硬件系统的支持,大大的提高了跨平台移植性。1995年,此时的Linux 可在Intel、Digital 以及Sun SPARC处理器上运行了,用户量也超过了50万,相关介绍Linux的

6、Linux Journal杂志也发行了超过10万册之多。1996年6月,Linux 2.0内核发布,此内核有大约40万行代码,并可以支持多个处理器。此时的Linux 已经进入了实用阶段,全球大约有350万人使用。1997年夏,大片泰坦尼克号在制作特效中使用的160台Alpha图形工作站中,有105台采用了Linux操作系统。1998年是Linux迅猛发展的一年。1月,小红帽高级研发实验室成立,同年RedHat 5.0获得了InfoWorld的操作系统奖项。4月Mozilla 代码发布,成为linux图形界面上的王牌浏览器。Redhat 宣布商业支持计划,网络了多名优秀技术人员开始商业运作。王牌

7、搜索引擎”Google”现身,采用的也是Linux服务器。值得一提的是,Oracle 和Informix 两家数据库厂商明确表示不支持Linux,这个决定给予了Mysql数据库充分的发展机会。同年10月,Intel和Netscape宣布小额投资红帽软件,这被业界视作Linux获得商业认同的信号。同月,微软在法国发布了反Linux公开信,这表明微软 8课堂优质公司开始将Linux视作了一个对手来对待。十二月,IBM发布了适用于Linux的文件系统AFS 3.5以及Jikes Java 编辑器和Secure Mailer及DB2测试版,IBM的此番行为,可以看作是与Linux羞答答地第一次亲密接触

8、。迫于Windows和Linux的压力,Sun逐渐开放了Java协议,并且在UltraSparc上支持Linux操作系统。1998年可说是Linux与商业接触的一年。1999年,IBM宣布与Redhat公司建立伙伴关系,以确保Redhat在IBM机器上正确运行。三月,第一届LinuxWorld 大会的召开,象征Linux时代的来临。IBM、Compaq和Novell宣布投资Redhat公司,以前一直对Linux持否定态度的Oracle公司也宣布投资。五月,SGI公司宣布向Linux移植其先进的XFS文件系统。对于服务器来说,高效可靠的文件系统是不可或缺的,SGI的慷慨移植再一次帮助了Linux

9、确立在服务器市场的专业性。7月IBM启动对Linux的支持服务和发布了Linux DB2,从此结束了Linux得不到支持服务的历史,这可以视作Linux真正成为服务器操作系统一员的重要里程碑。2000年初始,Sun公司在Linux的压力下宣布Solaris8降低售价。事实上Linux对Sun造成的冲击远比对Windows来得更大。2月Red Hat发布了嵌入式Linux的开发环境,Linux在嵌入式行业的潜力逐渐被发掘出来。在4月,拓林思公司宣布了推出中国首家Linux工程师认证考试,从此使Linux操作系统管理员的水准可以得到权威机构的资格认证,此举大大增加了国内Linux爱好者学习的热情。

10、伴随着国际上的Linux热潮,国内的联想和联邦推出了“幸福Linux家用版”,同年7月中科院与新华9课堂优质科技合作发展红旗Linux,此举让更多的国内个人用户认识到了存在着Linux这个操作系统。11月,Intel 与 Xteam合作,推出基于Linux的网络专用服务器,此举结束了在Linux单向顺应硬件商硬件开发驱动的历史。2001月新年依使就爆出新闻,Oracle宣布在OTN上的所有会员都可免费索取Oracle 9i的Linux版本,从几年前的“绝不涉足Linux系统”到如今的主动献媚,足以体现Linux的发展迅猛。IBM则决定投入10亿美元扩大 Linux系统的运用,此举犹如一针强心剂

11、,令华尔街的投资者们闻风而动。到了5月这个初夏的时节,微软公开反对”GPL”引起了一场大规模的论战。8月红色代码爆发,引得许多站点纷纷从Windows操作系统转向Linux操作系统,虽然是一次被动的转变,不过也算是一次应用普及。12月Red Hat 为IBM s/390大型计算机提供了Linux解决方案,从此结束了AIX孤单独行无人伴的历史。2002年是Linux企业化的一年。2月,微软公司迫于各洲政府的压力,宣布扩大公开代码行动,这可是Linux开源带来的深刻影响的结果。3月,内核开发者宣布新的Linux系统支持64位的计算机。2003年1月,NEC宣布将在其手机中使用Linux操作系统,代

12、表着Linux成功进军手机领域。5月之中SCO表示就Linux使用的涉嫌未授权代码等问题对IBM进行起诉,此时人们才留意到,原本由SCO垄断的银行/金融领域,份额已经被Linux抢占了不少,也难怪SCO如此气急败坏了。9 月中科红旗发布Red Flag Server4版本,性能改进良多。11月IBM注资Novell以2.1亿收购SuSE,同期Redhat计划停止免费的Linux,顿时业内骂声四起。Linux在商业化的路上渐行渐远。10课堂优质2004年的第1月,本着“天下事分久必合,合久必分”之天理,SuSE嫁到了Novell,SCO继续顶着骂名四处强行“化缘”,Asianux,Mandrak

13、eSoft也在五年中首次宣布季度赢利。3月SGI宣布成功实现了Linux操作系统支持256个Itanium 2处理器。4月里美国斯坦福大学Linux大型机系统被黑客攻陷,再次证明了没有绝对安全的OS。六月的统计报告显示在世界500强超级计算机系统中,使用Linux操作系统的已经占到了280席,抢占了原本属于各种Unix的份额。9月HP开始网罗Linux内核代码人员,以影响新版本的内核朝对HP有利的方式发展,而IBM则准备推出OpenPower服务器,仅运行Linux系统。11课堂优质1.3 FreeBSDFreeBSD是一种由Unix经过BSD、386BSD和4.4BSD发展而来的类Unix操

14、作系统。它运行在Intel x86 family兼容处理器、DEC Alpha、Sun微系统的UltrasPARC、Itanium(IA-64)和AMD64处理器上。针对PowerPC的支持正在开发中。它被普遍认为是相当可靠和健壮的。苹果电脑的Mac OS X即以 Mach 为内核,配合 FreeBSD 的驱动程序和实用工具为基础。1993年12月FreeBSD 1.0版本于这个月正式发布。FreeBSD建成了Internet 上最大、最繁忙的匿名文件服务器。BSD与AT&T的法律纠纷仍然威胁着FreeBSD系统的合法性。就在FreeBSD得到相当多用户欢迎的时候,Unix系统实验室与伯克利计

15、算机系统研究小组的法律纷争有了结论。虽然最后不必进行赔偿,但是BSD Unix系统中必须去除原来来自AT&;T的源码。伯克利计算机系统研究小组去除了这些不到10%源码,发布了4.4BSD Lite。直到1995年1月他们才发布了FreeB SD 2.0,这次就是一个完全的4.4BSD Lite的系统了。但是在大约一年时间之内,FreeBSD不能在原有1.0基础上进行改进并推出新版本,而这个时期正是Internet进一步发展的阶段,FreeBSD错过了一个发展壮大的好时机。12课堂优质1.4 MAC OSMac OSMac OS是一套运行于苹果Macintosh系列电脑上的操作系统。Mac OS

16、是首个在商用领域成功的图形用户界面。Macintosh组包括比尔阿特金森(Bill Atkinson)、杰夫拉斯金(Jef Raskin)和安迪赫茨菲尔德(Andy Hertzfeld)。现行的最新的系统版本是Mac OS X v10.4.2版。关于Macintosh是如何被开发和潜在创意的起源,有许多种观点。历史记录里把Macintosh和施乐公司(Xerox)帕洛阿尔托研究中心(PARC)的Alto计划联系在一起,伊凡萨瑟兰(Ivan Sutherland)的画板(Sketchpad)和道格英格巴特(Doug Engelbart)的在线系统(On-Line System)对其早期贡献产生了

17、不小的影响。Mac OS可以被分成操作系统的两个系列:n一个是老旧且已不被支持的“Classic”Mac OS(系统搭载在1984年销售的首部Mac与其后代上,终极版本是Mac OS 9)。采用 Mach 作为内核,在OS 8以前用“System x.xx”来称呼。n新的Mac OS X结合BSD Unix、Open Step和Mac OS 9的元素。它的最底层建基于Unix基础,其代码被称为Darwin,实行的是部分开放源代码。13课堂优质1997年1月24日,Mac OS 7.6发布。1997年7月22日,Mac OS 8发布。它是第一个真正不同于Mac OS 1.0桌面的系统。新一代的M

18、ac OS 8比它的前辈运行更加稳定。1998年10月15日,Mac OS 8.5发布。1999年11月5日,Mac OS 9发布。它带来许多诸如Sherlock 1的增强版Sherlock 2的新特性。2000年1月6日,在San Francisco MacWorld展览会上苹果展示了其最新操作系统Mac OS X,Mac OS X是基于Rhapsody策略上的新操作系统。像NeXT操作系统一样他也是一个UNIX系统。苹果在MacOS X中推出了新的“Aqua”桌面。办公软件AppleWorks 6发布。苹果网站上新引入了如iTools的新特性,iTools是苹果为Mac用户和iReview

19、推出的一项免费Web空间服务。2001年3月24日,苹果如期发布了Mac OS X 10.0。由于苹果想在7月份MacWorld展览会上举行一个隆重的Mac OS X 10.1的发布会,所以这次发布显得比较平静。同期,大量的Mac OS X版的第三方软件发布。2001年7月18日,在纽约MacWorld展览会上,苹果推出新G4电脑。主频高达867MHz,其中双800MHz处理器具有每秒120亿次浮点运算能力。14课堂优质2001年9月25日,苹果发布了Mac OS X的升级版Mac OS X 10.1,它比Mac OS X运行更快,支持CD刻录,DVD播放和新界面(Aqua),另外还发布了Ma

20、c OS X Server v10.1。2001年12月4日,Mac OS 9.2.2发布。2002年3月14日:Mac OS X苹果远程桌面发布。苹果远程桌面是一款基于Mac OS网络的管理工具软件。2002年3月21日,iPod升级版和23英寸的Cinema显示器在东京MacWorld展览会上发布,苹果宣布在4月份Mac OS X将支持蓝牙。2003年10月25日,Mac OS X 10.3发布,系统代号为“Panther”。10.3还增强了反垃圾邮件功能,Mac OS X Mail(邮件)功能可以对用户邮箱地址簿之外的地址传来的所有电子邮件进行安全扫瞄。2005年4月29日,Mac OS

21、 X 10.4 Tiger版发布,这是目前为止最新的版本。15课堂优质n这几种操作系统都存在图形界面,但其内部实现机制是不同的,如X Window是以Client/Server方式实现的,Win2000等是在内核实现图形引擎的。n学好Windows API,理解其中的概念,也有助于对其它图形操作系统的学习。16课堂优质二、了解Windows API的必要性WindowsAPI函数库MFCOWLVB控件集。Visual C+Borland产品Visual Basic其它17课堂优质 SDK(Software Development Kit)编程方法利用Windows系统提供的API(Applic

22、ation Programming Interface)函数直接与操作系统打交道,能够提供最佳的性能、最强大的功能和最大的灵活性。无论采取什么样的方式编写代码,了解Windows API都是必要的,它对于理解Windows原理非常重要。当前市面上流行的开发工具通常都提供一个功能库,例如Visual C+的MFC,Borland C+的OWL以及Visual Basic的控件模式编程。这些功能库都是对API函数的封装,另外加上一些更为复杂的功能特性。然而,其基础是Windows API函数,其功能只是API的一个子集。而且出于易用性考虑,屏蔽了API的一些具体细节,因此在某些场合不能够满足编程者

23、的需要。而且由于其对API一些特性的屏蔽,使得编程者对于所面对的18课堂优质 Windows系统不能有很全面的认识,不利于向更高层次发展。当然,使用这些功能库有助于提高项目速度,掌握Windows API有助于更深入以及更好的掌握这些功能库,并且能有效的扩展其功能。通常高级语言都提供了API的调用接口,只是其调用方式不太一样。例如Visual C+可以直接调用API,而Visual Basic则要通过API文本浏览器获得API函数的Visual Basic兼容定义以及对动态库的引用来使用API函数。高级语言的这个特性给了我们接触和使用底层Windows API,利用API强大功能的机会。19课

24、堂优质三、窗口与消息机制图形操作系统鼻祖Alto 1973年4月,第一个可操作的Alto电脑在Xerox PARC完成。Alto是第一个把计算机所有元素结合到一起的图形界面操作系统。它使用3键鼠标、图形窗口、以太网络连接。20课堂优质 CP/M 真正让PC能够像现在这样普及的功劳还要归功于Digisat Reseach公司的工程师加里基尔达尔,他在20世纪70年代所开发的CP/M操作系统,CP/M当时是在IBM/704大型机上运行的一款8位操作系统。21课堂优质2.1 窗口 Microsoft Windows应用程序中的窗口是屏幕上的一个矩形区域,是应用程序用来显示输出或接受用户输入的。由于窗

25、口是用户和应用程序交互的基本元素,所以应用程序首要的任务就是创建一个窗口。图1-1就是一个典型的Windows窗口。图2-1 一个Windows窗口22课堂优质桌面窗口:桌面窗口:桌面窗口是系统定义的窗口,在Windows启动后,自动创建桌面窗口。这个窗口绘制了屏幕的背景,作为Windows应用程序显示窗口的基础(可以认为是所有应用程序窗口的父窗口)。该窗口的背景图案在注册表中如下位置定义:HKEY_CURRENT_USERControl PanelDesktopWallpaper可以通过SDK函数SetDeskWallpaper指定。23课堂优质应用程序窗口:应用程序窗口:每一个标准的Win

26、dows应用程序至少要创建窗口,称为主窗口。这个窗口是用户与应用程序间的主要接口。绝大部分应用程序还会直接或间接的创建许多其它的窗口,来完成与主窗口相关的任务,每一窗口都是用来显示输出或是从用户得到输入。应用程序窗口的组成:应用程序窗口的组成:应用程序窗口一般包括标题栏、菜单栏、System菜单、最小化、最大化/还原、关闭按钮、改变大小的边框(Border)、客户区、水平滚动条和竖直滚动条。更为复杂的窗口还包括工具条、状态条等。图2-2为一个标准的应用程序窗口-精简的文件管理器。24课堂优质图2-2 一个标准的Windows窗口一个标准的Windows窗口25课堂优质图2-3 一个扩展的Win

27、dows窗口26课堂优质其它类型的窗口:控制框、对话框和消息框其它类型的窗口:控制框、对话框和消息框 控制框是用来获得用户特定信息的窗口,通常与其他窗口连用,最典型的是与对话框合用。对话框是含有一个或多个控制框的窗口。应用程序可以通过对话框提示用户提供完成某一个命令所需的输入。例如打开文件对话框。如图2-427课堂优质文件打开对话框图2-4 文件打开对话框 图2-5 Windows消息框。28课堂优质标题栏:标题栏:用于显示应用程序定义的一行正文,通常是应用程序的名字或说明该窗口的用途,由应用程序在创建窗口时指定。标题栏使得用户可以通过鼠标或其它的定点设备来移动窗口。标题栏的正文可以通过API

28、函数SetWindowText来改变。菜单栏:菜单栏:菜单栏列出了应用程序所支持的命令,菜单栏中的项是命令的主要分类。用户可以选择一个命令让应用程序完成该任务。SystemSystem菜单栏:菜单栏:System菜单是一个由Windows系统创建和管理的菜单,其中包含标准的菜单项设置,用户可以通过它改变窗口的大小或对窗口重新定位或关闭应用程序。29课堂优质窗口边框:窗口边框:窗口边框是围绕窗口四周的一个区域,通过它用户可以用鼠标或其他定点设备改变窗口的大小。客户区:客户区:客户区是窗口的一部分,应用程序用于显示输出,如正文或图形。应用程序必须提供一个称为窗口过程的函数,来处理窗口的输入并在客户

29、区输出。水平水平/竖直滚动条:竖直滚动条:水平和竖直滚动条把鼠标或键盘的输入转换成一个数值,应用程序用来按水平或竖直方向移动客户区的内容。最大最大/最小化最小化/关闭按钮:关闭按钮:最大/最小化按钮用来改变窗口的大小和位置,关闭按钮用来关闭当前窗口。30课堂优质 应用程序可以通过函数CreateWindow或CreateWindowEx来创建窗口。CreateWindowEx比CreateWindow多一个参数dwExStyle(扩展风格)。Windows系统还提供了另外一些函数DialogBox、CreateDialog以及MessageBox来创建特殊用途的窗口,例如对话框和消息框。创建窗

30、口创建窗口31课堂优质HWND CreateWindowEx(DWORDHWND CreateWindowEx(DWORD dwExStyle,/扩展窗口风格 LPCTSTRLPCTSTR lpClassName,/注册的窗口类名 LPCTSTRLPCTSTR lpWindowName,/窗口名 DWORDDWORD dwStyle,/窗口风格 intint x,/左上角x坐标位置 intint y,/左上角y坐标位置 intint nWidth,/窗口宽度 intint nHeight,/窗口高度 HWNDHWND hWndParent,/父窗口句柄 HMENUHMENU hMenu,/窗口

31、菜单句柄 HINSTANCEHINSTANCE hInstance,/应用程序实例句柄 LPVOIDLPVOID lpParam,/附加窗口创建数据 ););CreateWindowExCreateWindowEx的函数原型如下:的函数原型如下:32课堂优质窗口类窗口类(lpClassName):(lpClassName):每一个窗口都从属于某一窗口类,应用程序必须在创建某类窗口之前注册窗口类,窗口类定义了窗口的外观和特性。窗口类的主要部分是一个窗口过程,也就是接收和处理给窗口的输入和请求的函数,Windows系统以消息的形式给窗口提供输入或请求。Windows系统提供了一些预定义的窗口类,应

32、用程序通常要注册自己的一些窗口类。窗口名窗口名(lpWindowName):(lpWindowName):窗口名是便于用户识别一个窗口的正文字符串。主窗口、对话框或消息框一般是在其标题栏中显示窗口名。对于控制,窗口名的外观取决于控制的类。应用程序可以通过SetWindowText来改变窗口名,通过GetWindowTextLength和GetWindowText来获得当前窗口名。窗口扩展风格窗口扩展风格(dwExStyle):(dwExStyle):指定窗口的扩展风格。这个扩展风格可以参见MSDN中的Platform SDK:Windows User Interface部分。33课堂优质参数说

33、明窗口风格窗口风格(dwStyle):(dwStyle):窗口风格是一个命名的常量,由它定义窗口类没有指定的窗口外观及特性。1.1.覆盖窗口(覆盖窗口(overlappedoverlapped):):覆盖窗口是一个顶层窗口,具有标题栏、边框和客户区,用作应用程序的主窗口。也可以有一个System菜单、最小化和最大化按钮以及滚动条,通过给CreateWindowEx中的dwStyle参数加入WS_OVERLAPPED风格创建。2.2.弹出窗口(弹出窗口(popup)popup):是一个特定类型的覆盖窗口,通常对应于对话框、消息框以及其他显示在应用程序主窗口之外的临时窗口中。标题栏可选,其他与覆盖

34、窗口一样。通过给CreateWindowEx中的dwStyle参数加入WS_POPUP风格创建。3.3.子窗口(子窗口(childchild):子窗口具有WS_CHILD风格,被限制在其父窗口的客户区中,应用程序通常就是用子窗口把主窗口的客户区分成几个功能区域。子窗口必须有一个父窗口,父窗口可以是任意类型的窗口,甚至是child窗口。应用程序可以为子窗口提供除了菜单以外的任何东西。34课堂优质参数说明窗口可以有一个父窗口,有父窗口的窗口称之为子窗口,由父窗口提供的坐标系统对子窗口进行定位。父窗口会影响到子窗口的外观(例如裁剪)。如果一个窗口没有父窗口或者它的父窗口是桌面窗口,称之为顶层窗口。应

35、用程序通过EnumWindows来获得每一个顶层窗口的句柄,再由EnumWindows把每一个顶层窗口的句柄传给应用程序定义的回调函数。父窗口或属主窗口父窗口或属主窗口(hWndParent):(hWndParent):一个窗口可以拥有别的窗口,也可以被别的窗口所拥有。被拥有的窗口总是在其父窗口的前面,当它的父窗口最小化时,该窗口同时被隐藏,并随父窗口的销毁而销毁。子窗口占据父窗口的一部分客户区,不能越出。35课堂优质子窗口标志或菜单句柄子窗口标志或菜单句柄(hMenu):(hMenu):对于覆盖窗口或者弹出窗口,这是一个标志窗口使用的菜单的句柄,如果该参数为NULL,那么使用缺省的窗口类的菜

36、单。如果这是一个子窗口,那么hMenu就是子窗口标志(Identifier,简称ID)。这个标志是子窗口用来唯一的表明自己的整数。当子窗口向父窗口发送通知消息(Notify Message)时能够告诉父窗口是哪一个子窗口在发送消息。每个窗口都有它自己的位置、尺寸和在Z轴中的次序。一般窗口位置由相对于屏幕左上角的坐标决定;如果是子窗口则相对于它的父窗口客户区左上角的坐标决定。窗口的尺寸是其高度和宽度的像素值;窗口在Z轴中的次序则是窗口在覆盖窗口堆中的位置。位置、尺寸和在位置、尺寸和在Z Z轴中的次序轴中的次序(hWndParent):(hWndParent):36课堂优质实例句柄实例句柄(hIn

37、stance):(hInstance):每一个Windows程序都有一个与之相应的实例句柄,Windows系统在应用程序开始的时候就为它提供了实例句柄。由于每一个应用程序可以有多个拷贝,Windows系统就是利用实例句柄来区分应用程序的不同实例。该参数在Windows 95/98中可以是任意实例句柄(指定一个任意的实例作为窗口的属主,在Windows NT/2000中,出于安全性考虑,该参数被忽略(ignored)了。创建数据创建数据(lpParam):(lpParam):每一个窗口都可以有与之相应的由应用程序定义的创建数据。在窗口第一次被创建时,Windows系统把数据的指针传给所创建窗口的

38、窗口过程,窗口过程用这些数据初始化应用程序定义的变量。当Windows创建一个窗口后,会向窗口过程发送一个WM_CREATE消息,这个消息的LPARAM参数中保存着一个CREATESTRUCT结构,有关窗口的特性等内容,包括创建数据都在这个结构中,该结构中的LPVOID lpCreateParams就是lpParam指针。应用程序可以通过响应WM_CREATE消息来根据创建数据初始化窗口中的变量。37课堂优质裁剪裁剪(Clip)(Clip):Windows系统不会自动的裁剪父窗口客户区中的子窗口,这就意味着父窗口可以在子窗口的位置上进行绘制。但如果父窗口具有WS_CLIPCHILDREN风格,

39、Windows系统就会自动裁剪父窗口客户区中的子窗口,这样父窗口就不能在上面进行绘制。子窗口覆盖同一客户区中的其他窗口,一个或多个其它的子窗口共享一个父窗口叫做兄弟窗口。兄弟窗口也可以在相互间的客户区中绘画,除非其中某个子窗口具有WS_CLIPSIBLINGS风格。如果应用程序为子窗口指定了这个风格,那么在绘画时,位于这个子窗口中的兄弟窗口的任何部分就被裁减。窗口相关的术语窗口相关的术语38课堂优质被禁止的窗口被禁止的窗口(Disabled Window)(Disabled Window):窗口是可以被禁止的,被禁止的窗口不再接收键盘或鼠标输入,但它能够接受来自其他窗口或者其他应用程序的以及W

40、indows系统的消息;应用程序可以通过EnableWindow来激活或者禁止一个窗口。使用IsWindowEnabled来确定一个窗口是否被禁止;如果当前一个子窗口或其他的子孙窗口有输入焦点,那么当父窗口被禁止时,其子孙窗口也会失去输入焦点。前台窗口和后台窗口前台窗口和后台窗口(Foreground&Background Window):(Foreground&Background Window):每一个进程可以创建多个线程,每个线程都能创建窗口。创建正在使用的窗口的线程称作前台线程,这个窗口称作前台窗口。所有其它的线程为后台线程,由后台线程创建的窗口叫做后台窗口。39课堂优质活动窗口活动窗

41、口(Active Window):(Active Window):活动窗口是应用程序的顶层窗口,也就是当前使用的窗口。我们可以通过ALT+TAB或者ALT+ESC来激活一个顶层窗口,另外有:SetActiveWindow,SetWindowPos,DeferWindowPos,SetWindowPlacement和DestroyWindow可以激活顶层窗口。40课堂优质可见性:可见性:窗口可以是可见的,也可以被隐藏。如果窗口被隐藏,这相当于被有效的禁止了。隐藏的窗口可以处理来自Windows系统或其他窗口的消息,但不能处理用户输入或者显示输出。如果应用程序在使用CreateWindowEx时不

42、指定WM_VISIBLE风格,那么它只创建一个隐藏窗口。应用程序可以通过IsWindowVisible函数来确定一个窗口是否可见。通过ShowWindow函数来显示或隐藏一个窗口。如果一个窗口被最小化了,Windows系统会自动隐藏相应的从属窗口。同样当一个父窗口被恢复时,Windows系统也会自动地显示相应的从属窗口。在这两种情况下,Windows系统在显示或隐藏子孙窗口时,向其发送WM_SHOWWINDOW消息。有时,应用程序也可能在不最小化或隐藏属主窗口的情况下需要隐藏从属窗口,那么应用程序可以使用函数ShowOwnedPopups(隐藏本窗口所有子窗口。),这个函数设置或删除所有从属窗

43、口的WS_VISIBLE风格,并在隐藏或显示拥有窗口之前向它们发送WM_SHOWWINDOW消息。41课堂优质每个窗口都是一个窗口类的实例,窗口类是一个属性集,Windows系统在创建应用程序的窗口时用它作为模板。应用程序必须在它创建某类窗口前注册这个窗口类,注册一个窗口类也就是把一个窗口过程、类风格及其它一些类属性与类名联系起来。窗口类:42课堂优质窗口类的种类:窗口类的种类:1.1.系统全局类:系统全局类:在Windows系统启动时,它就注册一些系统全局类用于控制框,包括按钮、组合框、列表框、滚动条、编辑控制框和静态控制框。任何应用程序都可以随时使用系统全局类。2.2.应用程序全局类:应用

44、程序全局类:应用程序全局类是通过动态链接库注册的窗口类,也适用于系统中的所有应用程序。应用程序要通过如下关键字在注册表中列出注册应用程序全局类的DLL的名字。HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWindowsAPPINIT_DLLS43课堂优质在注册某应用程序全局类的DLL被卸下时,Windows系统销毁这个应用程序全局类。基于这个原因,所有的应用程序必须在这个DLL被卸下前销毁所有属于应用程序全局类的窗口,函数UnregisterClass用于删除应用程序全局类,并释放与之相关的内存空间。3.3.应用程序局部类:

45、应用程序局部类:应用程序局部类是由应用程序注册并由它自己专用的窗口类,尽管应用程序可以注册任意数目的局部类,但绝大多数应用程序只注册一个,这就是应用程序的主窗口所属的窗口类。Windows系统销毁一个局部类是在注册它的应用程序关闭时,应用程序也可用函数UngisterClass来删除一个局部类并释放与之相关的内存空间。44课堂优质类搜索路径:类搜索路径:1.Windows系统按指定类名搜索应用程序局部类列表。2.如果名字不在应用程序局部类列表中,Windows系统再搜索应用程序全局类列表。3.如果名字不在应用程序全局类列表中,Windows系统就搜索系统全局类列表。4.如果还没有,创建失败。应

46、用程序可以屏蔽系统全局类,这就是说,应用程序可以注册一个与某个系统全局类具有相同名字的应用程序局部类,这就替代了应用程序描述表中的系统全局类,但又不影响其它应用程序对这个系统全局类的使用。45课堂优质typedef struct _WNDCLASS UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HINSTANCE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;WN

47、DCLASS,*PWNDCLASS;46课堂优质类附加空间类附加空间(cbClsExtra):Windows为系统中每一个窗口类管理一个WNDCLASS结构。在应用程序注册一个窗口类时,它可以让Windows系统为该结构分配和追加一定字节数的附加内存空间,这部分内存称之为类附加内存,由属于这种窗口类的所有窗口共享,类附加内存空间用于存储类的附加信息。函数SetClassWord和SetClassLong用来把某一个值复制到类附加内存中,并可以通过GetClassWord和GetClassLong来检取这些值。47课堂优质窗口附加空间窗口附加空间(cbWndExtra):Windows为每一个窗

48、口管理一个内部数据结构,在注册一个窗口类时,应用程序能够指定一定字节的附加内存空间,称为窗口附加内存。在创建这类窗口时,Windows系统就为窗口结构分配和追加指定数目的窗口附加内存空间,应用程序可以用这部分内存存储窗口特有的数据。函数SetWindowWord和SetWindowLong可以把某一个值复制到附加内存,函数GetWindowWord和GetWindowLong可以检取这些值。48课堂优质关于窗口函数的举例关于窗口函数的举例:AdjustWindowRect AdjustWindowRectEx BringWindowToTop ChildWindowFromPoint Clos

49、eWindow CreateWindow CreateWindowEx DeferWindowPos DestroyWindow GetNextWindow GetParent GetTopWindowGetWindow GetWindowPlacement GetWindowRect GetWindowText GetWindowTextLength MoveWindowSetDeskWallpaper SetForegroundWindow SetParent SetWindowPos SetWindowText49课堂优质窗口和图形子系统的变迁1、Windows 95、98、Me绝大多数

50、图形和窗口管理函数代码为不可重入的,最终导致应用程序在多数时间以单线程运行2、NT 3.1、3.5图形和窗口管理函数代码为可重入的,但位于用户态进程中(CSRSS.EXE)3、NT 4.0以后,图形引擎移入到核心态设备驱动程序中(WIN32K.SYS)50课堂优质Win32Win32子系统子系统服务器进程服务器进程用户进程用户进程1 1用户线程用户线程1111用户线程用户线程1212用户线程用户线程1313用户进程用户进程2 2用户线程用户线程2121用户线程用户线程2222用户线程用户线程1111用户线程用户线程1212用户线程用户线程1313用户线程用户线程2121用户线程用户线程2222

51、快速快速LPC,LPC,不引起调度事件,不引起调度事件,但产生描述表切换但产生描述表切换51课堂优质Win32子系统的核心设备驱动程序1、窗口管理器:控制窗口显示;管理屏幕输出;收集来自键盘、鼠标和其它设备的输入信息;将用户信息传给应用程序。2、图形设备接口(GDI):图形输出设备的函数库,包括线条、文本、绘图、和图形操作函数。52课堂优质窗口的关系Desktop Desktop WindowWindowWS_POPWS_POPUP UP WS_OVERWS_OVERLAP LAP WS_POPWS_POPUP UP WS_OVERWS_OVERLAP LAP WS_CHILWS_CHILD

52、D WS_CHILWS_CHILD D WS_CHILWS_CHILD D 53课堂优质思考:n保护模式下,所有的进程都有自己独立的虚拟地址空间,这些窗口之间如何协同工作?n典型情况下,如果用户进行关机操作,对于未保存的工作,会看到是否保存的提示窗口,系统是如和判断应用程序存在未保存的工作呢?54课堂优质消息的本质:nWINDOWS是由事件驱动的抢先式的多任务系统,必须能同时处理多个事件,WINDOWS中事件的触发与管理借助消息机制来实现,消息可理解为一个事件,系统为应用程序生成一消息队列,消息在其中被投递与发送,应用程序只要从其消息队列中取出消息,逐一处理就可以了n消息是Windows下一切

53、应用程序间,包括Windows自身,进行交互和通讯的渠道,是Windows实现对运行在其下的所有应用程序进行控制及应用程序对Windows进行响应的交互手段.55课堂优质消息举例:关机操作Csrss.exeWM_QUERYENDSESSION/WM_ENDSESSION遍历所 有用户进程,向有窗 口的线程发送如下消 息CTRL_LOGOFF_EVENT 控制台 应用WM_QUERYENDSESSION/WM_ENDSESSION/CTRL_SHUTDOWN_EVENT 内核进程/服务56课堂优质消息的产生n操作系统内部根据一定的逻辑产生 n硬件中断设备驱动程序消息 消息的载体消息队列n系统消息

54、队列 n线程消息队列 57课堂优质Windows与DOS程序的区别nDOS程序顺序的,过程驱动的程序设计方法有一个明显的开始,明显的过程及一个明显的结束程序能直接控制程序事件或过程的顺序nWindows程序由事件的发生来控制,所有的事件是无序的是密切围绕消息的产生与处理而展开的,主要任务是对应用程序要发出或要接收的消息进行排序和管理58课堂优质消息的主体:typedef struct tagMSG HWND hwnd;/所属对象所属对象UINT message;/消息标识消息标识 WPARAM wParam;/附加参数附加参数LPARAM lParam;/附加参数附加参数 DWORD time

55、;/投递时间投递时间POINT pt;/光标位置光标位置 MSG;59课堂优质消息的处理n系统缺省窗口过程 系统控制窗口在一般情况下的外在表象和内部逻辑 n自定义窗口过程 由开发者负责相关的窗口外在表象和内部逻辑 不做处理的消息,发送给缺省窗口过程60课堂优质消息的路由n通过线程消息队列处理排队消息 用户输入的结果,移动鼠标、敲击键盘 还包含时钟消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)n直接发送给窗口过程非排队消息 调用特定的Windows函数Windows系统一般通过发送非排队消息把影响某窗口的事件通知窗口61课堂优质消息环:n应用程序必须删除和处理

56、投递到它的线程消息队列中的消息,单一线程的应用程序一般是在它的WinMain函数中使用一个消息环来删除消息,并把消息发送到相应的窗口过程进行处理。n具有多线程的应用程序在创建窗口的每一个线程中使用一个消息环。n消息环和以看作是一个水泵,不断地从消息队列中提取消息,使得后来的消息可以放入到队列中62课堂优质消息环主体:while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);TranslateMessage将虚拟键消息转换为字符消息DispatchMessage 分派消息到对应的窗口过程63课堂优质消息

57、过滤:BOOL GetMessageBOOL GetMessage(LPMSGLPMSG lpMsg,/message information HWNDHWND hWnd,/handle to window UINTUINT wMsgFilterMin,/first messageUINTUINT wMsgFilterMax/last message););64课堂优质BOOL PeekMessageBOOL PeekMessage(LPMSGLPMSG lpMsg,/message information HWNDHWND hWnd,/handle to window UINTUINT wM

58、sgFilterMin,/first message UINTUINT wMsgFilterMax,/last message UINTUINT wRemoveMsg/removal options););65课堂优质消息循环流程66课堂优质消息的投递和发送BOOL PostMessageBOOL PostMessage(HWNDHWND hWnd,/handle to destination window UINTUINT Msg,/message WPARAMWPARAM wParam,/first message parameter LPARAMLPARAM lParam /second

59、 message parameter););马上返回,不保证一定成功马上返回,不保证一定成功67课堂优质LRESULT SendMessageLRESULT SendMessage(HWNDHWND hWnd,/handle to destination window UINTUINT Msg,/message WPARAMWPARAM wParam,/first message parameter LPARAMLPARAM lParam/second message parameter););等待对应窗口过程处理完消息等待对应窗口过程处理完消息68课堂优质消息死锁 调用函数SendMessa

60、ge的线程向另一个线程发送一条消息,要等待接收消息的窗口过程返回,如果接收消息的线程在处理时放弃了控制,发送消息的线程就不能继续执行下去,因为它正等待SendMessage返回,这种情况就叫做死锁。接收消息的线程无需直接放弃控制,下列函数任意一个都可以让线程放弃控制。DialogBox GetMessage DialogBoxIndirect MessageBox DialogBoxIndirectParam PeekMessage DialogBoxParam69课堂优质消息的种类消息的种类 n系统消息系统使用系统定义的消息来控制应用程序的操作,并给应用程序提供输入或其它信息进行处理,所有应

61、用程序对系统消息的识别方式是相同的n自定义消息 用于特殊的窗口间通信70课堂优质系统消息通用窗口消息(Windows)WM列表框控制(ListBox)LB静态控制框(Static)STM组合控制框(ComboBox)CB按钮控制框(Button)BM滚动条控制(ScrollBar)SBM编辑框控制(Edit)EM消息类别前 缀表2-1 消息类别起始值0 x00B00 x00E00 x00F00 x01400 x01700 x01800 x000171课堂优质自定义消息nWindows系统保留用于系统定义的消息标志值的范围从0 x0000到0 x3fff(WM_USER-1)和0 x8000到0

62、 xbfff,应用程序不能把这些值用于私有消息。n从0 x0400(WM_USER)到0 x7fff间的值用于应用程序定义的用于它自己的消息标志,使应用程序能够与其它应用程序中的窗口进行通信。nUINT RegisterWindowMessage (LPCTSTR lpString/message string );72课堂优质API编程框架n注册窗口类n创建、显示、更新主窗口n建立消息环n编写窗口过程,处理各种消息73课堂优质HelloWin例子n实例n源码74课堂优质附加消息的产生用户从系统菜单选择了用户从系统菜单选择了CloseCloseWindowProcWindowProcDefWindowProcDefWindowProcWM_SYSCOMMANDWM_SYSCOMMANDWM_SYSCOMMANDWM_SYSCOMMANDWM_CLOSEWM_CLOSEWM_CLOSEWM_CLOSEWM_DESTROYWM_DESTROYDestroyWindowDestroyWindowWM_QUITWM_QUIT75课堂优质

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!