Welcome

首页 / 软件开发 / VB.NET / API入门系列之五 -一个正儿八经的SDK程序

API入门系列之五 -一个正儿八经的SDK程序2010-01-04 cnblogs beyondcode上一篇,讲了一个简单的SDK程序的多种版本的编写,弹出了一个窗口,显示了我们计算1到10的结果 ,计算的程序不是重点,重点在于,一:让大家认识到Unicode版本的程序和ASCII版本的程序在编程方 面的区别,以及怎么样编写出通用代码的程序。二:怎么样运用API或者c++库函数格式化非字符数据到 一个字符串中显示出来。

不过,那个相当简单的程序,还算不上是一个正儿八经的SDK程序,也 就是说还不是一个纯爷们儿,因为我们并亲自完成一个SDK程序的经典步骤。而是调用了一个MessageBox API函数,这个函数虽然使用简单,但是在它的内部,那可是相当复杂啊~~~。怎么个复杂法,具体的我 不知道,但是我知道的是一个SDK程序的经典步骤它是都用到了的,什么是编写SDK程序的经典步骤呢?新 手朋友们听好了哦,现在我就告诉你。

第一步:注册窗口类

第二步:创建窗口

第 三步:消息循环

第四步:编写窗口消息处理函数

上面我所说的,听起来都比较专业,下 面我就解释一下,什么是注册窗口类呢?注册窗口类就是使用一个 窗口类结构体(WNDCLASSEX) 来描述一 类窗口,这类窗口具有相同的属性,也就是你在结构体WNDCLASSEX中指定的那些值。只要是用这个窗口 类创建的窗口都具有这些特性。至于WNDCLASS能描述哪些特性,下面会具体讲,这里你只要了解是用一 个名叫WNDCLASSEX的结构体来描述一个窗口的类别。

创建窗口应该比较好理解吧,就是创建一个 具体的窗口,好像是一句废话嘛。也就是说这个窗口是根据一个窗口类而创建的,不是凭空而造的。意 思是你要创建一个窗口,那么必须要有一个已经注册的窗口类。

对于前两步,我打一个比方,就 好比你要造一辆车,那们第一步首先是干什么? 当然是设计图纸啦,图纸上就有说明这种车有哪些特性 。然后第二步才是根据这个图纸来创建一个具体的看得见的车。所以我上面说的注册窗口类就好比设计 窗口的图纸,然后就是根据这个窗口的图纸来创建一个具体的窗口。都说成这样了,应该明了了吧 ~~

至于消息循环,就是创建的窗口随时都有可能发生很多事情,那么发生的这些事情怎么通知你 呢?比如窗口最小化了,窗口大小改变了,怎么通知你呢? 其实就就是通过消息循环不断的取得窗口 所发生的事情,然后以消息的形式发送给我们后面要介绍的窗口消息处理函数。

消息处理函数呢 就是我们程序员负责编写代码对具体的消息进行具体的处理,当然你也可以不处理,交给系统的默认处 理函数来处理。

对于这两步,我也打一个比方。消息循环就好比汽车的一个总传感器,它源源不 断的将汽车内部所发生的事情以消息的形式通过仪表板传达给开车的人,开车的人根据具体的事情而采 取具体的操作,当然你也可以不操作,无动于衷,对于windows消息来说,不操作倒没有什么,而对于开 车的人来说,不操作的后果就不好说了。 在这里,这个总传感器就相当于SDK程序的消息循环,不断的 发送消息,而开车的人就相当于窗口消息处理函数,负责处理各种消息。明白了吧,还不明白的话就看 看下面的具体的程序吧,也需还有最后一丝希望可以让你恍然大悟。

讲了正儿八经的SDK程序的 经典步骤后,我们进入正式的代码阶段,通过代码结合上面所讲理论进一步巩固知识。我讲逐步讲解并 逐步编写一个自己注册窗口类,创建窗口,带消息循环,并自己编写消息处理过程的程序。

首先 给出程序框架

/* BY beyondcode */

#include <windows.h>

#include <tchar.h>


LRESULT CALLBACK WinMessageProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );


int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )

{

return 0;

}