Windows应用程序框架(窗口类与应用程序框架联系)

  

学习提示:如果没有C语言基础可以通过下方链接学习:

0基础C语言学习与训练

0基础C++学习与训练

 

  在我们学习Windows项目开发之前,需要先学习Windows应用程序的框架,而该框架是由C与C++语言构成,

所以,需要大家至少具备C语言的基础。

 

  经过前面的学习,我们已经认识了(Windows应用程序的框架),同时,也学习了该框架的入口点WinMain函数,

接下来,我们就继续学习(Windows应用程序框架)中的(窗口类的信息)。

 

  窗口类的信息:其实,它是一个由Windows提供的(结构体)用于描述(窗口信息),当我们通过程序对这个

(结构体)中的成员进行设置后,就可以设定将要创建的窗口对应的内容。包括:窗口背景颜色、图标、光标、窗口中

是否有菜单、窗口的显示风格、该窗口对应哪一个应用程序,就是我们自己编写的Windows应用程序,以及,在窗口上

发生相应事件时,对应的事件处理函数,都在该(窗口类的信息)中设置。


窗口类信息的原型如下:

typedef struct _WNDCLASSEX

{

   UINT cbSize;

   UINT style;

   WNDPROC lpfnWndProc;

   int cbClsExtra;

   int cbWndExtra;

   HANDLE hInstance;

   HICON hIcon;

   HCURSOR hCursor;

   HBRUSH hbrBackground;

   LPCTSTR lpszMenuName;

   LPCTSTR lpszClassName;

   HICON hIconSm;

}WNDCLASSEX;

窗口类信息的原型分析:

1、成员一:cbSize,用于接收(该结构体的大小)。

2、成员二:style,描述窗口一般属性的样式标志。

常用标志见下表:

标志
说明
CS_HREDRAW 当移动或改变窗口宽度时,刷新整个窗口。
CS_VREDRAW 当移动或改变窗口的高度时,刷新整个窗口中。
CS_OWNDC 为该类中的每个窗口分配一个单值的设备描述表。
CS_DBLCLKS 当双击鼠标时向窗口程序发送一个双击信息,同时,光标位于窗口中。
CS_PARENTDC 在父窗口中设置一个子窗口的剪切区,以便子窗口可以画在父窗口中。
CS_SAVEBITS 在一个窗口中保存用户图像,以便在该窗口被遮挡、移动时不必每次刷新屏但是,会占用更多的内存,并且人工进行同样的操作要慢得多。
CS_NOCLOSE 禁止系统菜单上的关闭命令。

 

上表中的标志,可以通过(或运算符)把多个标志组合在一起使用。

 

3、成员三:lpfnWndProc,用于指向一个回调函数,而什么是回调函数,以及,它的作用,我们会在后面的章节中

再为大家详细介绍。

另外,这个回调用函数就是(Windows应用程序框架)里面的(事件处理器),如果,大家记不清楚的话,可以回顾

前面学习过的Windows项目开发系列(应用程序框架分析)。

所以,为什么窗口中发生的事件,如鼠标的点击事件所产生的消息,就会发送到(事件处理器)中,原因就是在该成员

中指定了对应的(回调函数)即事件处理器。

 

所以,从一步一步的学习中,我们就可以慢慢地了解到(Windows应用程序框架)中的每个部分是如何联系起来的。

 

4、成员四与五:cbClsExtra与cbWndExtra,这两个成员用于指示Windows把附加的运行时间信息保存于

Windows类中的某些单元而设计的。但在使用时,可以简单地把它们设置为0就可以了。

 

5、成员六:hinstance,用于指向一个(应用程序的句柄)。而它就是从WinMain函数的(第一个参数)传递进来的,

如果大家记不清楚的话,可以回顾前面学习过的(WinMain的分析)。

 

6、成员七:hicon,用于指向一个(图标的句柄)。可以加载一个你自己的图标或系统的图标。

 

7、成员八:hCursor,用于指向一个(光标的句柄)。

 

8、成员九:hbrBackground,用于指向一个(窗口画刷的句柄)。该成员可以指向不同颜色的画刷,从而,可以为窗口的背景设置不同的颜色。

 

9、成员十:lpszMenuName,用于指向一个(窗口菜单的名字)。如果没有窗口菜单,可以设置为NULL空值。

 

10、成员十一:lpszClassName,用于指向一个Windows类名的字符串,而这个(类名)就代表着当前这个(窗口类信息),即通过该(类名)就可以找到(窗口类信息)的设置内容。

 

11、成员十二:hiconSm,用于指向一个(应用程序的小图标句柄)。

 

当我们了解完(窗口类信息)的原型以后,在往后的时间中,就可以通过代码对以上的成员进行设置,从而,确定将要

创建的窗口(属性与内容),而相关的代码实现部分,将会在后面的章节中再为大家详细学习。

 

小结:

(1)通过窗口类中的成员三:lpfnWndProc,就指向了一个回调用函数,即(事件处理器),从而,该窗口就可以与

框架中的(事件处理器)产生了联系。

(2)通过窗口类中的成员六:hinstance,用于指向一个(应用程序的句柄)。从而,该窗口对应哪一个

(Windows应用程序)就可以知道。同时,该(应用程序的句柄)是从WinMain入口函数的第1个参数传递进来的,

从而,窗口类与WinMain入口函数产生了联系,所以,该Windows类在(Windows应用程序框架)中就起到了

承上启下的作用。

(3)在学习的过程中,出现的(句柄、回调函数)等的内容,我们会在后面的章节中,再为大家作详细的介绍。

 

>>>下载Windows应用程序开发代码