Recibo una clase que ya existe error de la llamada a RegisterClassEx
en el siguiente código. Este código se encuentra en un constructor de la clase:Volver a registrar clase de ventana definida por el usuario - C++
this->m_wcx.cbSize = sizeof(WNDCLASSEX); // size of structure
this->m_wcx.style = CS_HREDRAW | CS_VREDRAW; // initially minimized
this->m_wcx.lpfnWndProc = &WndProc; // points to window procedure
this->m_wcx.cbClsExtra = 0; // no extra class memory
this->m_wcx.cbWndExtra = 0; // no extra window memory
this->m_wcx.hInstance = m_hInstance; // handle to instance
this->m_wcx.hIcon = ::LoadIcon(NULL, IDI_APPLICATION); // default app icon
this->m_wcx.hCursor = ::LoadCursor(NULL, IDC_ARROW); // standard arrow cursor
this->m_wcx.hbrBackground = NULL; // no background to paint
this->m_wcx.lpszMenuName = NULL; // no menu resource
this->m_wcx.lpszClassName = s_pwcWindowClass; // name of window class
this->m_wcx.hIconSm = NULL; // search system resources for sm icon
// Register window class.
if ((this->m_atom = ::RegisterClassEx(&m_wcx)) == 0)
{
dwError = ::GetLastError();
TRACE(_T("Failed to register window class.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), dwError, _T(__FILE__), __LINE__);
THROW(dwError);
}
Esta primera vez que este código se ejecuta, funciona sin ningún problema. Cuando el destructor de la clase que se llama anula el registro de la clase:
::UnregisterClass(s_pwcWindowClass, this->m_hInstance);
Todo esto funciona bien la primera vez a través. Las llamadas posteriores al constructor dan como resultado RegisterClassEx
que falla con ERROR_CLASS_ALREADY_EXISTS
. ¿Qué estoy haciendo mal?
¿Está seguro de que se llama al destructor de la primera instancia antes de crear la segunda instancia? –
@unaperson: Sí. Estoy ejecutando esto desde una aplicación de prueba, a menos que haya un error fatal, que se registraría, al destructor solo se le llama cuando manualmente le pido que lo llame. –
¿Ha comprobado el valor de retorno de 'UnregisterClass'? – Jon