windows程序设计——窗口类

一 创建并显示一个窗口的“遐想”。
? 首先,要显示的窗口在哪里呢?

    要想显示你自己的窗口,显然你得事先创建一个自己的窗口。当你想要一个窗口时,Window系统才会为你创建窗口。不要时,Window再销毁这个窗口。噢,这是多么相当然的一种机制啊,你说是吧!也就是说我们得先创建一个窗口才能显示。(否则哪里来的窗口给你显示呢?)
? 其次,你想创建什么样的窗口呢?
    那么,创建什么样的窗口呢?创建前,Window系统可不知道你要的是
什么类型的窗口啊(比如标题栏上显示什么图标,鼠标形状是什么,窗口背景颜色等等)。这些类型信息应在你创建前事先告诉Window系统。可以采用这种方法:就是我们事先写一份要创建窗口的类型申请表,提交(注册)给Window系统。然后在创建时,可以让Windows按这个申请表来创建你所要的窗口了。也就是说我们还应该先提交一个申请表,申请成功后再根据这个表创建一个窗口。
    依据上述的理由,我假想了以下几个步骤要做:
    第一. 你得先填写一份你想创建的窗口类的“申请表”。
    第二. 然后将这“申请表”通过一个API函数提交给Windows系统(即注册到Windows系统中)。
    第三. 如果提交(注册)成功,就说明Window系统通过了你的“申请表”,Windows系统中就有了一份你所申请的窗口类(注:这个
注册成功的已经注册在系统中的“申请表”我们称之为窗口类)。这样你就可以利用这个申请成功的窗口类,通过一个专门的API函数让Windows系统创建一个或多个的同一窗口类的窗口。
    第四. 创建成功后,我们有了窗口。但是,虽然窗口已存在在内存中,并不一定就马上显示在屏幕上(这根据你的意愿了),所以之后的某时你可以用一个API函数来让Windows系统显示刚才创建的窗口。
    Window系统就是这样设计的噢!(呵呵,这样设计不算坏,我可以接受。)
    以上就是创建一个窗口的大致过程。请记住,在Window系统下你的程序要显示一个你想自定的窗口总是得经历如此步骤的。还要记住一点,我们的代码只是通过调用Window系统所提供的API函数来完成对窗口间接的管理。实际上窗口的管理操作都由Window系统直接完成的。
    好,让我们在本篇中先来完成第一、二步骤吧!

二 第一步 填写一份“申请表”

1 用什么来作为这种“申请表”呢?

    我想,C语言中的struct结构体类型的变量来充当这个“申请表”是再合适不过的了。呵呵,真是这样,VC6下早已为我们准备好了这样的“申请表”了。那就是WNDCLASSEX(我们称之为窗口类结构体)。
    看看这个WNDCLASSEX结构体的底细吧!
    在windef.h中已经有定义:(下面所列的与真实文件中会有点不同,但目前你只要理解我这份就可以了。)
typedef struct tagWNDCLASSEX 

{
    UINT        cbSize;        //用来保存本结构体的所占字节数
UINT        style;      //窗口类型风格。
                       //比如,可设置“若移动窗口宽度时,则刷新整个窗口。
    WNDPROC      lpfnWndProc;       //回调函数指针,用以指向前面那个回调函数。
    int        cbClsExtra;       //略,我们可不必使用它,只要赋值为0就可
    int        cbWndExtra;       //略,同上
    HINSTANCE      hInstance;       //窗口所属的应用程序实例句柄。
    HICON       hIcon;         //大图标,(这个图标会显示在窗口的哪里呢?)
    HICON       hIconSm;        //小图标,(这个又会显示在窗口的哪里呢?)
    HCURSOR     hCursor;          //鼠标句柄,用以指定鼠标移入窗口时的样式
HBRUSH      hbrBackground;       //用来刷背景颜色的画刷句柄,
                          //窗口的颜色就会按这个显示。
LPCSTR      lpszMenuName;       //用来指向菜单资源名称字符串的指针,
                          //可让你的窗口有一个菜单。
LPCSTR      lpszClassName;       //用来指向窗口类名字符串的指针
                  

你可能感兴趣的:(windows程序设计)