课堂风格究竟意味着什么?它困惑了我。这是来自MSDN:风格 指定类样式。该成员可以是班级样式的任意组合。
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;
答案 0 :(得分:5)
类样式是影响该特定类窗口的每个实例的属性。为了澄清,让我们比较下面的窗口实例属性和类属性。假设您创建了一个名为MyCoolControl
的新Windows类,并创建了几个这样的实例:
每个实例都有自己的位置,窗口文本以及启用和可见状态 - 这些是窗口实例属性,您可以在一个窗口中独立设置这些属性。
但是,此控件的所有实例将共享相同的WndProc,如您用于创建类的WNDCLASS中所指定的那样。它们也具有相同的类属性,例如窗口是否接收双击消息而不是两个单独的单击消息(CS_DBLCLKS类样式位),或者窗口是否在调整大小时完全重绘(CS_HREDRAW,CS_VREDRAW),或者是否窗口有一个阴影(CS_DROPSHADOW)。完整的课程样式列表列在MSDN here。
因此,例如,如果你想让一个窗口有一个边框,那就是一个窗口样式位(WS_BORDER),你可以在CreateWindow中将它指定为一个窗口样式值(或者可以在以后的每个窗口中更改它SetWindowLongPtr(GWL_STYLE)),只有该窗口受到影响。但是,如果要创建一个具有投影的窗口,请在WNDCLASS的样式成员中指定它,它会影响该类的所有实例。
(有一些例外 - 在WNDCLASS中指定的WndProc实际上是该类窗口的默认wndproc;如果你愿意的话,你可以实际覆盖每个实例。但是大局仍然大致相同:WNDCLASS和CS_样式是全面的设置,而WS_ 1和CreateWindow的参数是特定于那个窗口的。)