win32程序窗口风格说明

参考:主要是罗云彬老师的《win32汇编程序设计》一、注册窗口时,用到的窗口类结构invoke RegisterClassEx,addr@stWndClassWNDCLASSEX    STRUCT  CbSize                  DWORD      ?    ;结构的字节数  Style                       DWORD
摘要由CSDN通过智能技术生成

参考:主要是罗云彬老师的《win32汇编程序设计》

一、注册窗口时,
用到的窗口类结构

invoke RegisterClassEx,addr@stWndClass

WNDCLASSEX    STRUCT

  CbSize                  DWORD      ?    ;结构的字节数

  Style                       DWORD      ?    ;类风格

  LpfnWndProc       DWORD      ?    ;窗口过程的地址

  CbClsExtra           DWORD     ?

  CbWndExtra         DWORD      ?

  HInstance             DWORD      ?    ;所属的实例句柄

  HIcon                     DWORD      ?    ;窗口图标

  HCursor                DWORD      ?    ;窗口光标

  HbrBackground        DWORD     ?     ;背景色

  LpszMenuName       DWORD     ?     ;窗口菜单

  LpszClassName      DWORD     ?     ;类名字符串的地址

  HIconSm                    DWORD      ?    ;小图标

WNDCLASSEX ENDS

程序定义了一个WNDCLASSEX结构的变量@stWndClass,用RtlZeroMemory将它填为全零(局部变量初始化的重要性在第3章中已经强调过),再填写结构的各个字段,这样,没有赋值的部分就保持为0,结构各字段的含义如下:

●   hIcon——图标句柄,指定显示在窗口标题栏左上角的图标。Windows已经预定义了一些图标,同样,程序也可以使用在资源文件中定义的图标,这些图标的句柄可以用LoadIcon函数获得。例子程序没有用到图标,所以Windows给窗口显示了一个默认的图标。

●   hCursor——光标句柄,指定了鼠标在窗口中的光标形状。同样,Windows也预定义了一些光标,可以用LoadCursor获取它们的句柄,IDC_ARROW是Windows预定义的箭头光标,如果想使用自定义的光标,也可以自己在资源文件中定义。

●   lpszMenuName——指定窗口上显示的默认菜单,它指向一个字符串,描述资源文件中菜单的名称,如果资源文件中菜单是用数值定义的,那么这里使用菜单资源的数值。窗口中的菜单也可以在建立窗口函数CreateWindowEx的参数中指定。如果在两个地方都没有指定,那么建立的窗口上就没有菜单。

●   hInstance——指定要注册的窗口类属于哪个模块,模块句柄在程序开始的地方已经用GetModuleHandle函数获得。

●   cbSize——指定WNDCLASSEX结构的长度,用sizeof伪操作来获取。很多Win32API参数中的结构都有cbSize字段,它主要是用来区分结构的版本,当以后新增了一个字段时,cbSize就相应增大,如果调用的时候cbSize还是老的长度,表示运行的是基于旧结构的程序,这样可以防止使用无效的字段。

●   style——窗口风格。CS_HREDRAW和CS_VREDRAW表示窗口的宽度或高度改变时是否重画窗口比较重要的是CS_DBLCLKS风格,指定了它,Windows才会把在窗口中快速两次单击鼠标的行为翻译成双击消息WM_LBUTTONDBLCLK发给窗口过程。笔者就曾经忘了指定它,结果怎么也搞不出双击消息来。

●   hbrBackground——窗口客户区的背景色。前面的hbr表示它是一个刷子(Brush)的句柄,“刷子”一词形象地表示了填充一个区域的着色模式。Windows预定义了一些刷子,如BLACK_BRUSH和WHITE_BRUSH等,可以用下列语句来得到它们的句柄:

      invoke   GetObjectStock, WHITE_BRUSH

但在这里也可以使用颜色值,Windows已经预定义了一些颜色值,分别对应窗口各部分的颜色,如COLOR_BACKGROUND,COLOR_HIGHLIGHT,COLOR_MENU和COLOR_WINDOW等,使用颜色值的时候,Windows规定必须在颜色值上加1,所以程序中的指令是:

mov     @stWndClass.hbrBackground,COLOR_WINDOW + 1

●   lpszClassName——指定程序员要建立的类命名,以便以后用这个名称来引用它。这个字段是一个字符串指针,在程序里,它指向“MyClass”字符串。

●   cbWndExtra和cbClsExtra——分别是在Windows内部保存的窗口结构和类结构中给程序员预留的空间大小,用来存放自定义数据,它们的单位是字节。不使用自定义数据的话,这两个字段就是0。(这部分还是很有用的,在修改标准控件的时候很有用

●   lpfnWndProc——最重要的参数,它指定了基于这个类建立的窗口的窗口过程地址。通过这个参数,Windows就知道了在DispatchMessage函数中把窗口消息发到哪里去,一个窗口过程可以为多个窗口服务,只要这些窗口是基于同一个窗口类建立的。Windows中不同应用程序中的按钮和文本框的行为都是一样的,就是因为它们是基于相同的Windows预定义类建立的,它们背后的窗口过程其实是同一段代码。

结构中的style表示窗口的风格,Windows已经有一些预定义的值,它们是以CS(Class Style的缩写)开始的标识符,如表4.1所示。

表4.1  一些窗口类的style预定义值

<

                  预定义值                   

       16进制值        

     对应二进制位   

CS_VREDRAW

00000001h

0

CS_HREDRAW

00000002h

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值