RegisterClass失败:类已经存在

时间:2010-09-03 19:33:33

标签: windows winapi

当我第二次创建子窗口时,

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

它抛出了一个异常,即该类已经存在。但子窗口在以下位置销毁时删除了子窗口类:

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

如果我评论期望错误,它会起作用。这是否意味着我不需要再次注册课程?

2 个答案:

答案 0 :(得分:5)

来自UnregisterClass documentation,其中说明:

  

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

表示销毁Windows 不会取消注册该类。

答案 1 :(得分:1)

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

这是来自MSDN:

  

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

<强>更新 这是有道理的,因为在创建任何窗口之前,可以基于窗口类创建许多窗口并且存在窗口类。