2010-09-03 2 views
5
sort

Lorsque je crée une fenêtre enfant pour la deuxième fois,RegisterClass échoué: classe déjà

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

Il jette une exception que la classe existe déjà. mais la classe de fenêtre enfant a été supprimé lorsque la fenêtre enfant a été détruite à:

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

Il fonctionne si je commente l'erreur expection. cela signifie-t-il que je n'ai pas besoin d'enregistrer à nouveau un cours?

+1

Mauvais commentaire, devrait être // détruire l'enveloppe de l'objet fenêtre –

Répondre

5

De l'UnregisterClass documentation, qui stipule:

Avant d'appeler cette fonction, une application doit détruire toutes les fenêtres créées avec la classe spécifiée.

Indique que la destruction des fenêtres n'a pas la classe annuler l'enregistrement.

1

Oui, vous ne devez pas réenregistrer la classe.

C'est de MSDN:

Toutes les classes de fenêtre qu'une application registres ne sont pas enregistrés quand il se termine.

Mise à jour: Cela est logique parce que beaucoup de fenêtres peuvent être créées à partir d'une classe de fenêtre et une classe de fenêtre existe avant de créer une fenêtre.

Questions connexes