WNDCLASS中的类样式,它引用了什么?Win32的

Mr.*_*.Tu 0 windows winapi

实际上,课堂风格意味着什么?它困惑了我.这是来自MSDN:style指定类样式.该成员可以是类样式的任意组合.

typedef struct _WNDCLASS { 
    UINT       style; 
    WNDPROC    lpfnWndProc; 
    int        cbClsExtra; 
    int        cbWndExtra; 
    HINSTANCE  hInstance; 
    HICON      hIcon; 
    HCURSOR    hCursor; 
    HBRUSH     hbrBackground; 
    LPCTSTR    lpszMenuName; 
    LPCTSTR    lpszClassName; 
} WNDCLASS, *PWNDCLASS; 
Run Code Online (Sandbox Code Playgroud)

Bre*_*McK 5

类样式是影响该特定类的窗口的每个实例的属性.为了澄清,让我们比较下面的窗口实例属性和类属性.假设您创建了一个名为的新Windows类MyCoolControl,并创建了以下几个实例:

  • 每个实例都有自己的位置,窗口文本以及启用和可见状态 - 这些是窗口实例属性,您可以在一个窗口中独立设置这些属性.

  • 但是,此控件的所有实例将共享相同的WndProc,如您用于创建类的WNDCLASS中所指定的那样.它们也具有相同的类属性,例如窗口是否接收双击消息而不是两个单独的单击消息(CS_DBLCLKS类样式位),或者窗口是否在调整大小时完全重绘(CS_HREDRAW,CS_VREDRAW),或者是否窗口有一个阴影(CS_DROPSHADOW).MSDN上列出了完整的类样式列表.

因此,例如,如果您希望窗口具有边框,那么这是一个窗口样式位(WS_BORDER),并在CreateWindow中将其指定为窗口样式值(或者可以使用SetWindowLongPtr(GWL_STYLE)在每个窗口中更改它)),只有那个窗口受到影响.但是,如果要创建具有投影的窗口,请在WNDCLASS的样式成员中指定它,并且它会影响该类的所有实例.

(有一些例外 - 在WNDCLASS中指定的WndProc实际上是该类窗口的默认wndproc;如果你愿意的话,你可以实际覆盖每个实例.但是大局仍然大致相同:WNDCLASS和CS_样式是全面的设置,而WS_ 1和CreateWindow的参数是特定于那个窗口的.)