01
章
SDK
入门
现在我们要学的是 Windows32 的编程,与 DOS 不同的是,实现的目标是一
个具有你所需要的功能的“窗口”。这个“窗口”时时刻刻都在与操作系统之间,通过
一个称之为“消息队列”的东西传送数据。因此处理好各种消息便成了 Win32 编程
的核心。
SDK 编程是相对于 MFC 来说的,也就是用 C 和 C++来调用
WindowsAPI,这 API 是操作系统的东西,其他语言(如 VB)也可以调用。因
此,以前也有人将这种编程称为 API 编程。当然,这儿对 C 或 C++进行了一些扩
展,所谓扩展,就是增加了许多宏定义、模板,让你看了之后大吃一惊,真不知
“何方神圣”倒底有何神通。
如果你 C 或 C++还不会的话,请先学习 C 语言和 C++语言,否则,你再刻
苦也等于看电影,也许你看懂了但你肯定不会演电影。学习窗口编程之前,你要知
道几个概念。
1. 实例(instance): 这是 C++的内容,“类”相当于结构体的数据类型,
用“类”这种类型去定义一个变量(如果是指针,则假定已经得到了空
间),这个变量就是那个“类”的“实例”。它和 C 语言中的变量是一回事,
不过只有用“类”定义的变量才称为“实例”。
2. 句柄(handle):这是 C 语言的内容,和文件句柄一样,它实际上是一
个整数,用来标识是哪一个实例,也就是实例的标识符。通过句柄可
以操作这个实例。
3. 回调(CALLBACK):这其实是 C 语言中的函数指针,函数指针一般在
大项目搭框架时常常使用。也就是你设计好要得到什么,把接口定义
好,具体怎么实现完全交给别人,别人只要把函数名传给你就 OK。这
个函数名就是地址,不过取这种地址的指针在定义上与普通指针有些
不同。小雅在《C 语言教程》的“函数指针”中有详细解说和例子。
一、
WinMain()
函数
WinMain()函数是窗口程序的入口函数,在这个函数中你就可以调用各种
API 函数来完成你的目标。①一般是先调用 RegisterClassEx()函数用当前窗口
句柄去向操作系统申请(或称登录)将要创建一个什么样的窗口,申请成功后,②再
调用 CreateWindowEx()函数创建一个窗口对象,这仅仅是一个外观,③还要调
用 ShowWindow()函数设置初期表示,即最大或最小或普通等。④最后还要调用
UpdateWindow()函数向窗口传送 WM_PAINT 消息来画出窗口里面的内容。
窗口创建完后,这是一个“静止”的窗口,⑤因此还要在 WinMain()函数的最
后添加消息循环,最后才 return。WinMain()函数完了之后,⑥还要再编写一个
“窗口消息处理”函数。上面讲了一大堆 API 函数的调用也许有点昏头,但那些全是