注册窗口类

在WNDCLASS结构中最重要的两个字段是第二个和最后一个,第二个字段(lpfnWndProc) 是依据这个类别来建立的所有窗口所使用的窗口消息处理程序的地址,最后一个字段是窗口类别的文字名称。程序写作者可以随意定义其名称。在只建立一个窗口的程序中,窗口类别名称通常设定为程序名称。

 wndclsCtrl.style   = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;

通常我们只使用少数的窗口类别样式,CS_HREDRAW | CS_VREDRAW 每当窗口的水平方向大小(CS_HREDRAW)或者垂直方向大小(CS_VREDRAW)改变之后,窗口要完全重画。

这里着重说明下CS_OWNDC:Allocates a unique device context for each window in the class,为这个类的每个窗口分配一个唯一的设备描述表(即DC)。

通常:在需要用DC时(GetDC或BeginPaint),windows会用默认值建立一个新的DC对象,你对DC做的所有改变(比如载入新的字体,画笔)都会在ReleaseDC或EndPaint中释放掉,都会丢失。

但如果你想在释ReleaseDC或EndPaint中释放掉DC后,仍保存对DC所做的那些更改,以便下次用DC(GetDC或BeginPaint)时不要再次设置,那么在注册窗口类时加上CS_OWNDC.

在注册窗口类时还要考虑到这个类名有没有被注册,这里用到一个函数

  

如lpclassName存在,则BOOL为true,得到class的副本到lpwndclass中,否则返回false

注册窗口类的代码如下:

#define  CUSTOMWND_CLASS _T("CCustomWnd")

将它放在CCustomWnd的构造函数中就行了

原文地址:https://www.cnblogs.com/hgy413/p/3693654.html