关于cbClsExtra跟cbWndExtra的疑惑

关于cbClsExtra和cbWndExtra的疑惑
c语言,windows。

面向过程,面向对象?



RegisterClass这样一个暧昧的名字,无疑使我偏向于面向对象,论点有了,论据呢?







class CFrame : public WNDCLASSEX 
{
CFrame();
~CFrame();

HANDLE hEvent;
SOCKET uPeople;
};



CFrame::CFrame()
{
cbSize = sizeof(WNDCLASSEX);
style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
lpfnWndProc = DefWindowProc;
cbClsExtra = sizeof(CFrame) - cbSize;
cbWndExtra = 0;
hInstance = GetModuleHandle(NULL);
hIcon = LoadIcon(NULL,IDI_APPLICATION);
hCursor = LoadCursor(NULL,IDC_ARROW);
hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
lpszMenuName = NULL;
lpszClassName = TEXT("WHAT");
hIconSm = LoadIcon(NULL,IDI_EXCLAMATION);


if (!RegisterClassEx(this)) throw GetLastError();
}



CFrame::~CFrame()
{
if (!UnregisterClass(lpszClassName,hInstance)) throw GetLastError();
}





或许上述代码可以论证成员cbClsExtra可以实现继承。



那么成员cbWndExtra它又为了实现哪一种面向对象的特性呢?



有种既生瑜何生亮的感觉,这2个成员价值重叠了。



当然我绝对不认为这是真正的答案,可是微软设计的逻辑思想究竟是怎么样的呢? 



难道真要去逆向win32k才能超脱吗?



我觉得****的前辈高人,都是很善良的,绝对不忍心让后辈们多走弯路。



请赐教吧!

------解决方案--------------------
楼主这帖有意思

cbClsExtra和cbWndExtra的价值绝对没有重叠,楼主也在#1提到了通过一个窗口类创建多个窗口
其实就是共性与个性的问题,为窗口类分配的cbClsExtra大小的数据就好比C++类中的静态变量,在内存中只有一份,
而为窗口分配的cbWndExtra大小的数据就相当于C++类中的一般的成员变量了,只有实例化后才分配内存,并且每个对象都分配了cbWndExtra大小的空间。

至于GWL_USERDATA,它是不够用的,写界面库子类化窗口时使用GWL_USERDATA来储存数据时是否要考虑这个问题:如果这个界面库的dll要给其他人用,而人家的项目之前已经使用GWL_USERDATA储存了其它数据怎么办?