本来是打算将Windows API一日一练,往下讲解的,但是,那个东西貌似又没啥可讲的。不熟悉SDK的编程,那些东西讲了用处也不大,所以,就打算讲讲这个。 Windows SDK编程,这个东西应该追溯到98时代了。而且如果要学习SDK之类的东西的话,还是去找Win98编程之类的书籍来看,现在的书籍专门讲SDK的基本上没有了,翻到手的都是.net框架,VCL使用那些东西了,对于底层的运作等等,讲解甚少。我这里的所有讲解,都是依托《Win98程序设计从入门到精通》这本书为蓝本进行Delphi版本的讲解。本书用来学习SDK是非常不错的,现在这个书已经绝版了,可以在网上搜搜电子版本的。 WinMain入口函数 做SDK开发,每个Windows程序都要有一个入口位置,也就是Windows开始执行的地方。学过C语言的,都晓得,C的入口为main函数,这个与main的效果是一样的,只是他标记了这是Windows程序,也就是说是可以有窗体的。WinMain函数的某些特征注定了他与应用程序的其他函数不同,首先他必须使用WINAPI的调用约定,这个在Delphi中就是Stdcall的约定方式,该函数的返回类型是int类型。 窗口过程 用了这么长时间的Windows,或者说学了那么长时间的编程,无论是MFC,还是VCL,都应该知道Windows是通过消息驱动来实现各种操作响应的。这个窗口过程就是专门用来处理各种消息的,所有的消息驱动操作都在本过程中实现。只要一个窗口指定了窗口过程,操作系统就会调用它。每个窗口都有一个默认的窗口过程,如果你不指定窗口过程,系统就会调用它默认的进行消息处理,操作系统通过窗口函数,来接受用户的消息和反馈用户的对应各种消息的操作给系统。窗口函数的返回类型为LRESULT,其实就是一个整数,该函数的返回必须用CallBack标记表示它是一个系统回调函数。典型的一个窗口过程中,包含了对N多消息的处理的,一般是一个很大的Case end 条件结构来针对各种消息进行处理。但是在很多时候,我们不想响应任何消息而仅仅交给系统去处理,这时,我们就可以调用默认的窗口过程处理了。但是这个窗口过程是如何产生出来的呢,那么就有另一个概念产生了,注册一个窗口类,一个窗口类对应着一个窗口过程,这应该也算得上是一个面向对象的方式吧,就是说,比如一个按钮类,他的消息响应处理窗口过程应该是同一个。 窗口类 窗口类定义窗口的类型,比如按钮窗口,Form窗口,编辑框窗口等,不同的窗口类有不同的形态外观,和不同的用法也就注定着有不同的窗口过程。 一个Windows程序,一般都有一个窗口,所以开始执行windows程序时,一般会定义并注册一个窗口类(这个不是指Delphi等面向对象中的那个类,而是指样式或者类型哦)。注册一个窗口类的目的是告诉操作系统本窗口的类型外观以及功能,这个窗口类就和前面讲的窗口过程关联起来了。不过注册窗口类,并不是建立一个窗口。注册窗口类,执行在系统内部增加一种窗口样式,以便于以后能够随时通过这个样式来生成一个新的窗口。 消息循环 消息循环式从应用程序的消息队列中取回消息,前面讲过了,Windows是消息驱动的所以,所有的Windows程序内部都要建立一个消息循环,此循环从应用程序的消息队列中读取任何未解决的消息,然后再将它送给Windows,这样Windows就会调用相应的窗口函数来对消息进行处理了。书上说,这个过程的部分原因是想将控制返回到操作系统中,以使调度表能合理的分配CPU时间,而不是等候应用程序时间片的结束。
好了,初步介绍就到这里了,马上就要下班了,下面再介绍操作系统的应用程序编写框架,以及如何通过注册窗口类来实现一个窗口
|
请发表评论