Перерегистрация определяемого пользователем класса окна - C ++

Я получаю сообщение об ошибке класса уже существует из-за вызова RegisterClassEx в следующем коде. Этот код находится в конструкторе класса:

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);
}

Когда этот код выполняется впервые, он работает без каких-либо проблем. Когда вызывается деструктор класса, он отменяет регистрацию класса:

::UnregisterClass( s_pwcWindowClass, this->m_hInstance );

Все это работает нормально с первого раза. Последующие вызовы конструктора приводят к ошибке RegisterClassEx с ERROR_CLASS_ALREADY_EXISTS . Что я делаю не так?

5
задан sehe 26 April 2011 в 15:06
поделиться