2010-09-03 15 views
5

Kiedy utworzyć okno dziecko po raz drugi,RegisterClass nieudane: klasa już wychodzi

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

zgłasza wyjątek, że klasa już istnieje. ale klasa okna podrzędnego została usunięta, gdy okno podrzędne zostało zniszczone pod adresem:

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

Działa, jeśli skomentuję błąd związany z wygaśnięciem. Czy to oznacza, że ​​nie muszę ponownie rejestrować klasy?

+1

Błędny komentarz, powinien być // zniszczuj obiekt window window –

Odpowiedz

5

Z UnregisterClass documentation, który stanowi:

Przed wywołaniem tej funkcji, aplikacja musi zniszczyć wszystkie okna utworzone z określonej klasy.

Wskazuje, że zniszczenie systemu Windows nie powoduje wyrejestrowania klasy przez.

1

Tak, nie powinieneś ponownie rejestrować zajęć.

To z MSDN:

Wszystkie klasy okien, że wniosek rejestrów niezarejestrowany kiedy go kończy.

Aktualizacja: Ma to sens, ponieważ wiele okien mogą być tworzone na podstawie klasy okna i klasy okna istnieć przed utworzeniem dowolnego okna.

Powiązane problemy