首页
社区
课程
招聘
[study-note]Windows环境下32位汇编语言程序设计--第4章 第一个窗口程序4.1 开始了解窗口(1)
发表于: 2008-4-13 21:37 7202

[study-note]Windows环境下32位汇编语言程序设计--第4章 第一个窗口程序4.1 开始了解窗口(1)

2008-4-13 21:37
7202
第4章 第一个窗口程序4.1 开始了解窗口(1)4.1.1 窗口是什么
    窗口是什么?大家每天在使用Windows,屏幕上的一个个方块就是一个个窗口!那么,窗口为什么是这个样子呢?窗口就是程序吗?

1. 使用窗口的原因(窗口是什么呢?看看自家阳台上的窗口就知道了。windows操作系统里的窗口就是从那里延伸过来的,要理解也不是那么难的。)

      回想一下DOS时代的计算机屏幕,在1990年Windows 3.0推出之前,计算机的屏幕一直使用文本模式,黑洞洞的底色上漂浮着白色的小字,性能不高的图形模式只用于游戏和一些图形软件。对DOS程序来说,屏幕是惟一的,上面有个光标表示输入字符的位置,程序运行后往屏幕输出一些信息,退出时输出的信息就留在了屏幕上,然后是第二个程序重复这个过程,当屏幕被写满的时候,整个屏幕上卷一行,最上面一行被去掉,然后程序在最底下新空出来的一行上继续输出。(作者讲这些话时我想应该是假设初学者连什么是DOS程序都不会的,要是那样的话,看这本书是铁定看不懂的。作者很留恋那个幸福的DOS时代吧。)
      对于一个单任务的操作系统,这种方式是很合理的,因为平时使用传真机或打字机就是用上卷的方式来容纳新的内容的。但是如果是多任务呢?两个程序同时往屏幕上写东西或者两个人同时往打字机上打字,那么谁都看不懂混在一起的是什么。DOS下的TSR(内存驻留)程序是多个程序同时使用一个屏幕的例子,但实质上这并不是多任务,而是TSR将别的程序暂时挂起,挂起的程序不可能在TSR执行期间再向屏幕输出内容,TSR在输出自己的内容之前必须保存屏幕上显示的内容,并在退出的时候把屏幕恢复原来的样子,否则挂起的程序并不知道屏幕已经被改变,在这个过程中,DOS不会去干预中间发生的一切。(这里有一句话不甚理解,TSR会输出自己的内容吗?为什么?后面的在TSR输出前将屏幕保存起来,和在使用后将屏幕恢复成原来的样子,这个倒不难理解。关键是什么是内存驻留程序?它和一般的程序有什么区别?)

      Windows是多任务的操作系统,可以同时运行多个程序,同样,各个程序在屏幕上的显示不能互相干扰,而且,多个程序可以看成是“同时”运行的,在后台的程序也可能随时向屏幕输出内容,这中间的调度是由Windows完成的。Windows采用的方法是给程序一块矩形的屏幕空间,这就是窗口。应用程序通过Windows向属于自己的窗口显示信息,Windows判断该窗口是不是被别的窗口挡住,并把没有挡住的部分输出到屏幕上,这样屏幕上显示的东西就不会互相覆盖而乱套。对于应用程序来说,它只需认为窗口就是自己拥有的显示空间就可以了。(这一段话极其重要,尤其是显示为紫色的一段文字,更是重要的没法讲。它是那么的简约而不简单啊,向我们展示了WINDOWS操作系统的一个深层面的运行原理,而又是其一个非常重要的原理。)
2. 窗口和程序的关系

    既然不同窗口的内容就是不同程序的输出,那么一个窗口就是一个程序吗?反过来,一个程序就是一个窗口吗?

答案是否定的,一个窗口不一定就是一个程序,它可能只是一个程序的一部分。一个程序可以建立多个顶层窗口,如Windows的桌面和任务栏都是顶层窗口,但它们都属于“文件管理器”进程,所以并不是一个窗口就是一个程序的代表。Windows的窗口采用层次结构,一个窗口中可以建立多个子窗口,如窗口中的状态栏、工具栏,对话框中的按钮、文本输入框与复选框等都是子窗口。子窗口中还可以再建立下一级子窗口,如Word工具栏上的字体选择框。(这里的介绍非常有意义啊,深入的阐述了windows窗口和程序之间的关系。而这个关系又应该是我们每一个学习WINDOWS编程的人所了解和掌握的。这一段话,真的非常重要,难以用言语来形容它的重要性。以后可能还要回来继续看看这段话才行。真的太重要了。)
     反过来,运行的程序并非一定就是窗口,比如悄悄在后台运行的木马程序就不会显示一个窗口向用户报告它在干什么。在Windows NT下用“任务管理器”查看,进程的数量比屏幕上的窗口多得多,意味着很多的运行程序并没有显示窗口。如果一个程序不想和用户交互,它可以选择不建立窗口。(上面显示红色的两句话很好很强大,尤其是最后一句话,更是有意思啊。老罗真是编程经验丰富的人啊,他已经成为了我奋斗的目标了。)
      所以本章的标题“第一个窗口程序”指学习编写第一个以标准的窗口为界面的程序,而不是泛指Windows程序。如果要写的Win32程序不是以窗口为界面的,如控制台程序等,就不一定采用本章中提及的以消息驱动的程序结构。(老罗真的太强大了,这两个不同颜色的句子都非常有意义,windows程序并非必须是图形界面的才算是,它也可以是控制台下的程序,真的太有意义的一段话了,标出来以后要回来继续研究。)
      虽然以窗口为界面的程序并不是所有Windows程序的必然选择,但绝大部分的应用程序是以这种方式出现的,从操作系统的名称“Windows”就可以看出这一点,了解窗口程序就是相当于在了解Windows工作方式的基础。(红色的话非常重要,如果不懂WINDOWS工作方式的话,就必须得对这句话高度重视才行。)
4.1.2 窗口界面

    大部分的窗口看上去都是大同小异的,先来看一个典型的窗口,即Windows附带的写字板,如图4.1所示。用它来说明窗口的各个部分。 (说出红色的那句话,说明了老罗把WINDOWS窗口看得有多么的透彻了啊,老罗不亏是大众的偶像和榜样啊。)


4.1 一个典型的窗口图

     窗口一般由屏幕上的矩形区域组成,不同的窗口可能包括一些相同的组成部分,如标题栏、菜单、工具栏、边框和状态栏等,每个部分都有自己固定的行为模式:(这一句话好有用,标下来在有需要的时候再研究研究。)
●   窗口边框——窗口的外沿就是窗口边框,用鼠标按住边框并拖动可以调整窗口的大小。(老罗太了不起了,给我们下了一个极其准确的窗口边框的定义,即鼠标按住后可以改变窗口大小的窗口部分为窗口边框。以后不会对这个概念有任何的模糊感了。)
●   标题栏——窗口的最上面是标题栏,用鼠标按住标题栏拖动可移动窗口,双击标题栏则将窗口最大化或从最大化的状态恢复。通过标题栏的颜色可以区分窗口是不是活动窗口,同时标题栏列出了应用程序的名称。(和上面的句子一样,这里画红色的句子相当有意义啊,老罗又给我们对标题栏下了一个极其准确的定义啊,即双击标题栏窗口将最大化或从最大化的状态恢复。这句话真的太形象生成了,试一下就可以知道什么是标题栏了。而不像某些书里面说的太模糊太没感觉了太容易产生歧义了。)
●   菜单——标题栏下面是菜单,单击菜单会弹出各种功能选择。

●   工具栏——菜单的下面是工具栏,工具栏上用图标的方式列出最常用的功能,相当于菜单的快捷方式。(对菜单和工具栏的描述非常的形象生动到位啊。对一些词语用得真的是太好了啊。)

●   图标和“最小化”、“最大化”与“关闭”按钮——图标位于标题栏的左边,三个控制按钮则位于标题栏的右边。单击图标会弹出一个系统菜单,双击图标则相当于按下了“关闭”按钮。“最小化”、“最大化”按钮用来控制窗口的大小。(描述得太好了,太准确了,老罗写的这一节真的是太好了啊。太感动了,@#$%*&^)
●   状态栏——状态栏位于窗口的最下面,用来显示一些状态信息。

●   客户区——窗口中间用来工作或输出的区域,叫做窗口的客户区,把窗口看做是一张白纸的话,客户区就是白纸中真正用来写东西的部分,程序在这里和用户进行交互。(客户区这个概念极其重要啊,而这里描述得那么的形象,非常容易理解,初学者看到这里都会觉得WIN32汇编不过这么简单而已的。)
●   滚动条——如果客户区太小不足于显示全部内容,右边或底部可能还有滚动条,拖动它可以滚动窗口的客户区,以便看到其他的内容。

    虽然大部分窗口看上去都差不多,但并不是每个窗口都有这些东西,也许有的窗口就没有图标和最小化、最大化框,有的没有工具栏或状态栏,有的没有标题栏,而有的就干脆是个奇怪的形状,如Office帮助中的助手,那些小狗小猫都是些不折不扣的窗口,Windows的桌面和桌面下面的任务栏也都是窗口,就连屏幕保护的黑屏幕也是一个大小为整个屏幕、没有标题栏和边框的窗口!(太强大了,老罗对WINDOWS下的窗口的了解已经到了一个这么恐怖的境界了啊。强大的老罗啊。小狗小猫,任务栏,黑屏幕,这些都是WINDOWS下的窗口啊,太让人意外了。)
     一致的窗口形状和行为模式为Windows用户提供了一致的用户界面,几乎所有的窗口程序都在菜单的第一栏设置有关文件的操作和退出功能、最后一栏设置程序的帮助,相同的功能在工具栏上的图标也是大同小异的,用户可以不再像在DOS下那样,对不同的程序需要学习不同的界面,用户自从学会使用第一个软件起,就基本学会了所有Windows软件的使用模式,而且可以通过相似的菜单、工具栏等来发掘程序的新功能。窗口的菜单和客户区则是最个性化的东西,菜单随程序功能的不同而不同,而客户区则是窗口程序的输出区域,不同的程序在客户区内显示了不同的内容。(什么是行为模式?窗口形状很容易理解,基本是矩形的。行为模式呢?菜单功能是一种行为模式吗?在客户区输出内容是一种行为模式吗?)
4.1.3 窗口程序是怎么工作的

1. 窗口程序的运行模式

    对程序员来说,要了解的不仅是用户可以看到的部分,还必须了解窗口底下的东西,了解用怎样的程序结构来实现窗口的行为模式。(这句话说得非常有道理,可以极大的打击一些自以为认识底层没有意义的无知分子。)
      DOS程序员熟悉的是顺序化的、按过程驱动的程序设计方法。程序有明显的开始、明显的过程和明显的结束,由程序运行的阶段来决定用户该做什么。而窗口程序是事件驱动的(再次提醒:这里是“窗口程序”而不是“Windows程序”,因为和窗口有关的程序才是事件驱动的,其他的Windows可能并不这样工作,如控制台程序的结构还是同DOS程序一样是顺序化的,但与窗口相关的Windows程序占了绝大多数,所以大部分的书籍中讲到Windows程序就认为是事件驱动的程序),用户可能随时发出各种消息,如操作的过程中觉得窗口不够大了,就马上会拖动边框,程序必须马上调整客户区的内容以适应新的窗口大小;用户觉得想先干别的事情,可能会把窗口最小化,关闭按钮也有可能随时被按下,这意味着程序要随时可以处理退出的请求。如果非要规定干活的时候不能移动窗口与调整大小,那么这些窗口就会呆在桌面上一动不动。(这里非常细致到位的介绍了DOS程序和WINDOWS程序的区别啊,尤其是对WINDOWS或窗口程序的描述非常有用。让我们对过程驱动和消息驱动的程序有了更加清晰的认识。)


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
本资料来自罗云彬的WIN32汇编教程,本人只是添加一点点注解而已(见括号内容),而这仅是个人见解,如有雷同,纯属巧合。如有不同见解,也可发表出来,大家一起讨论,本文章最终解释权归罗去彬所有。谢谢。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发~
等看下一篇
2008-4-13 21:44
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
广告位招租`
~~~
2008-4-14 07:45
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
TSR就类似于后台服务程序吧……
2008-4-14 08:52
0
雪    币: 290
活跃值: (11)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
罗` s  是引领我进入Win32的老师啊!!!!
感谢他。
同时支持你!!!
2008-4-14 13:49
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
同感!
2008-4-15 14:09
0
游客
登录 | 注册 方可回帖
返回
//