2010-09-03 106 views
5

当我第二次创造一个子窗口,的RegisterClass失败:类已经存在

if (!::RegisterClass(&hwClass)) 
{ 
    throw std::runtime_error("RegisterClass failed!"); 
} 

它抛出该类已经存在异常。但子窗口类被删除时,子窗口被销毁在:

WM_DESTROY: 
{ 
    delete this; //destroy child class 
} 

它的工作原理,如果我评论expect错误。这是否意味着我不需要再次注册课程?

+1

错误的评论,应该是/ /破坏窗口对象包装 – 2010-09-03 19:47:17

回答

5

UnregisterClass documentation,其中规定:

之前调用此函数,应用程序必须销毁与指定类创建的所有窗口。

指示销毁窗口不会取消注册该类。

1

是的,你不应该再次注册该课程。

这是从MSDN:

所有窗口类,应用程序 寄存器是未注册的,当它 终止。

更新: 这是有道理的,因为很多的窗户可以基于一个窗口类和窗口类创建创建任何窗口之前存在。