Winapi 多次使用AfxRegisterWndClass创建窗口

Winapi 多次使用AfxRegisterWndClass创建窗口,winapi,mfc,Winapi,Mfc,每次创建临时窗口(例如CWnd)时使用AfxRegisterWndClass(0)是否安全。例如,您将CWnd用作MessageBox()(或用于处理某个对象或选择某个对象等),因此在应用程序进程的整个生命周期(也有自己的主窗口)中多次创建和销毁它。还是会造成资源泄漏?正如我在评论中所说的,根据: 如果为多个具有 相同的参数,而不是为 每个类,每个类共享相同的窗口类。这种共享可以 如果使用CS_CLASSDC类样式,则会导致问题。而不是 多个CS_CLASSDC窗口类,最终只有一个 CS_类DC

每次创建临时窗口(例如
CWnd
)时使用
AfxRegisterWndClass(0)
是否安全。例如,您将
CWnd
用作
MessageBox()
(或用于处理某个对象或选择某个对象等),因此在应用程序进程的整个生命周期(也有自己的主窗口)中多次创建和销毁它。还是会造成资源泄漏?

正如我在评论中所说的,根据:

如果为多个具有 相同的参数,而不是为 每个类,每个类共享相同的窗口类。这种共享可以 如果使用CS_CLASSDC类样式,则会导致问题。而不是 多个CS_CLASSDC窗口类,最终只有一个 CS_类DC窗口类。使用该类的所有C++窗口共享 同一个DC。要避免此问题,请调用
AfxRegisterClass
来注册 班级


此外,如果在Win32中使用,它不会自动注销DLL注册的类,因此必须在DLL终止时显式注销类。通过使用
AfxRegisterClass
/
AfxRegisterWndClass
而不是
RegisterClass
,这将为您自动处理。有关详细信息:

请参阅此页,如果您使用相同的参数多次调用AfxRegisterWndClass,它只在第一次调用时注册一个类。稍后使用相同参数调用AfxRegisterWndClass将返回已注册的类名…如果您为具有相同参数的多个CWnd派生类调用AfxRegisterWndClass,而不是为每个类获取单独的窗口类,则每个类共享相同的窗口类。每个模块注册窗口类。除非您卸载注册窗口类的模块,否则资源不会被回收。也就是说,重新注册一个与已经注册的窗口类同名的窗口类(来自同一个模块)会向现有的窗口类返回一个
ATOM
。我在互联网上搜索,仍然得到了相同的页面,现在,我得到了正常的非黄页,并且有了详细信息。好吧,至少现在回答了。