注册窗口类

在为程序创建窗口之前,必须首先调用创建RegisterClass注册应用程序的窗口类。该函数只要一个参数,即一个指向类型为WNDCLASS的结构指针。它包含了一个窗口的基本属性,如窗口边框、窗口标题栏文字、窗口大小和位置、鼠标、背景色、处理窗口消息函数的名称等。事实上,注册的过程也就是将这些属性告诉系统,然后再调用CreateWindow函数创建出窗口。WNDCLASS结构具有下列原型:
 
typedef struct {    

UINT   style;    // 窗口的风格
    WNDPROC   lpfnWndProc;  // 指定窗口的消息处理函数的窗口过程函数    

 int    cbClsExtra;  // 指定分配给窗口类结构之后的额外字节数    

int    cbWndExtra;   // 指定分配给窗口实例之后的额外字节数    

 HINSTANCE  hInstance;   // 指定窗口过程所对应的实例句柄    

 HICON   hIcon;    // 指定窗口的图标 
 HCURSOR   hCursor; // 指定窗口的鼠标指针    

HBRUSH   hbrBackground;  // 指定窗口的背景画刷    

LPCTSTR  lpszMenuName; // 窗口的菜单资源名称    

 LPCTSTR   lpszClassName;  // 该窗口类的名称
} WNDCLASS, *PWNDCLASS;
 
从中可以看出:该结构有10个域(成员),其中第一个域style表示窗口类的风格,它往往是由一些基本的预定义风格通过位的“或”操作(操作符位“|”)组合而成的。例如,在HelloWin.c中,有:
 
WNDCLASS wndclass   // 窗口类
wndclass.style  = CS_HREDRAW | CS_VREDRAW 
wndclass.lpfnWndProc    = WndProc 

wndclass.cbClsExtra     = 0 

 wndclass.cbWndExtra     = 0 
wndclass.hInstance      = hInstance 
wndclass.hIcon          = LoadIcon (NULL, IDI_APPLICATION)  
 
wndclass.hCursor        = LoadCursor (NULL, IDC_ARROW) 

 wndclass.hbrBackground  = GetStockObject (WHITE_BRUSH) 

wndclass.lpszMenuName   = NULL;
wndclass.lpszClassName  = "HelloWin"; // 窗口类名
 
可以看到,wndclass.style被设为CS_VREDRAW | CS_HREDRAW,表示只要窗口的高度或宽度发生变化,都会重画整个窗口。
第二个域lpfnWndProc的值为WndProc。表明该窗口类的消息处理函数是WndProc函数。这里,可简单直接地输入消息处理(窗口过程)函数的函数名即可。
接下来的cbClsExtra和cbWndExtra在大多数情况下都会设为0。然后的hInstance成员,给它的值是由WinMain传来的应用程序的实例句柄,表明该窗口与该实例是相关联的。事实上,只要是注册窗口类,该成员的值始终是该程序的实例句柄。
下面的hIcon,是要给这个窗口指定一个图标,LoadIcon (NULL, IDI_APPLICATION)就是调用系统内部预先定义好的标识符为IDC_APPLICATION的图标作为该窗口的图标。同样,LoadCursor (NULL, IDC_ARROW)就是调用预定义的箭型鼠标指针。hbrBackground域用来定义窗口的背景画刷颜色,也就是该窗口的背景色。调用GetStockObject (WHITE_BRUSH)可以获得系统内部预先定义好的白色画刷作为窗口的背景色。这里LoadIcon、LoadCursor、GetStockObject等都是Windows的API函数,在程序中可直接调用。
lpszMenuName域的值若为NULL,则表示该窗口将没有菜单。否则,需要指定表示菜单资源的字符串。 
WNDCLASS结构的最后一个域lpszClassName是要给这个窗口类起一个唯一的名称,因为Windows操作系统中有许许多多的窗口类,必须用一个独一无二的名称来代表它们。通常,可以用程序名来直接作为这个窗口类的名称,它在创建窗口的CreateWindow函数中用到。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值