WINDOWS程序设计(003)----窗口类的注册

应该结合(002)中的程序例子好好地理解,有十分大的帮助.
连接:WINDOWS程序设计(002)—-HELLOWIN程序(源代码及详细解析) WINDOWS程序原理html

1.WNDCLASS类型结构的定义

  在WinMain中,咱们一般用以下形式定义一个WNDCLASS类型的结构.(定义方式参考后面的附表)
  
  而后对该结构的10个字段进行初始化,并调用RegisterClass函数.小程序

  在WNDCLASS结构中,两个最重要的字段是第二个字段和最后一个字段.
  第二个字段(lpfnWndProc)是用于基于该窗口类的全部窗口过程的地址.在HELLOWIN中,该窗口过程就是WndProc.
  最后一个字段是窗口类的名称,容许用户任意命名.当程序只建立一个窗口时,窗口类的名称一般与程序名相同.
  
  另外几个字段描述了窗口类的其余一些特性.下面考察WNDCLASS结构的每一个字段.函数

(1) style

  如下语句用C语言的按位亦或运算符,组合了两个32位的”类风格”(class style)的标识符:
  
  在头文件WINUSER.H中,全部前缀为CS的标识符定义以下:设计

  这种方式定义的标识符经常被称为”位标记“(bit flag),由于每一个标识符都只能影响复合值的一位.在这些类风格中,只有少数会被常常使用.程序HELLOWIN使用了两个标识符,以指定不管什么时候窗口的水平尺寸(CS_HREDRAW)或垂直尺寸(CS_VREDRAW)被改变,全部基于该窗口类的窗口都将被从新绘制.在调整HELLOWIN的窗口尺寸时,能够发现,文本字符串被从新绘制在窗口新的中心位置上.真是这两个标识符确保了这种结果.稍后咱们将了解窗口尺寸的变化是如何通知给窗口过程的.指针

(2) lpfnWndProc

  对于WNDCLASS结构中的第二个字段,初始化语句以下:
  
  该语句将该窗口的窗口过程设为WndProc函数,即HELLOWIN.C中的第二个函数.这个函数将处理传递给全部的基于该窗口类建立的窗口的全部消息.在C语言中,当在语句中按这种方式使用函数名时,咱们引用的其实是指向函数的指针.code

(3&4) cbClsExtra & cbWndExtra

  下面两个字段用于在类结构和Windows内部维护的窗口结构中预留一些额外的空间:
  
  
  应用程序能够根据须要来使用这些额外的空间.HELLOWIN中没有用到这个特性,所以将这两个参数覆位0.不然,正如匈牙利标记法所表示的,这些字段能够被设为一个”字节数”.htm

(5) hInstance

  接下来的字段表示应用程序的实例句柄(是WinMain的一个参数):
  字符串

(6) hIcon

  下面的语句为全部的基于该窗口类的窗口设定一个图标:
  
  IDI表示”图标的标识符”(ID for an icon).
  HICON,表示”图标的句柄”(handle to an icon).get

(7) hCursor

  
  LoadCursor函数载入一个预约义的鼠标指针(称为IDC_ARROW),并返回指针的句柄.该句柄被用来设定WNDCLASS结构的hCursor字段.当鼠标指针出如今这类窗口的客户区内时,将变成一个小箭头.it

(8) hbrBackground

  下一个字段为窗口的客户区指定了背景色.字段名hbrBackground的前缀hbr表示”画刷的句柄”(handle to a brush).画刷是一个图形学术语,表示用于区域填充的像素着色模式.Windows有几个标准的画刷,又称为”库存”画刷.下面对GetStockObject的调用返回一个白色画刷的句柄:
  
  这意味着窗口客户区的背景将被填充为白色.

(9) lpszMenuName

  接下来一个字段指定了窗口类的菜单.因为HELLOWIN不带任何菜单,因此该字段被设为NULL:
  

(10) lpszClassName

  最后,必须为窗口类赋予一个名称.对于一个小程序来讲,这个名称能够简单地利用程序名表示,如保存在变量szAppName中的字符串”HelloWin”:
  
  这个字符串既能够由ASCII字符组成,也能够由Unicode字符组成,美文的英文具体取决于UNICODE标识符是否已经被定义.

当WNDCLASS结构的全部10个字段完成初始化以后,程序HELLOWIN调用函数RegisterClass来完成该窗口类的注册.该函数的惟一参数就是一个指向WNDCLASS结构的指针.

2.附表

ASCII版本WNDSLASSA:

  该结构的Unicode版本定义以下:

  头文件WINUSER.H在定义了WNDCLASSA和WNDCLASSW结构以后(另外还定义了指向这些结构的指针),又基于UNICODE标识符的定义定义了WNDCLASS结构和指向WNDCLASS结构的指针(将一些指针包含进来,目的是保持向后的兼容性):

书中的原话:

 在本书中,当我介绍后续结构时,将只给出这些结构在功能上等效的定义,例如对WNDCLASS来讲.其等效的定义以下:

同时,我也放宽了各类指针的定义.相信你也绝对不会在代码中乱堆一些LP和NP为首的变量类型.

《Windows程序设计 第五版 珍藏版》  
相关文章
相关标签/搜索