2009-08-17 7 views
1

Existe-t-il un cas où MessageBox peut renvoyer 0 autre que pas assez de mémoire? J'ai un cas où je suspecte le HWND que je passe à MessageBox n'est pas valide ou peut-être qu'il appartient à une fenêtre qui est en train d'être détruite.MessageBox renvoyant 0 si HWND est incorrect

Dans mon cas, le MessageBox n'est pas affiché et renvoie 0, mais il me semble avoir assez de mémoire disponible.

+0

GetLastError aide. Il renvoie 1400 - ERROR_INVALID_WINDOW_HANDLE, ce qui est logique. Je suis encore un peu confus car :: IsWindow retourne TRUE sur le même handle – Tyler

+0

Si la fenêtre est en train d'être détruite, alors IsWindow peut encore techniquement être vrai même si la fenêtre est partiellement détruite et donc pas utile pour votre usage . Avez-vous essayé IsWindowVisible? – jeffm

+0

Les deux :: IsWindow et :: IsWindowVisible renvoient TRUE avant MessageBox et FALSE après MessageBox. Donc, ma conclusion est que MessageBox est en quelque sorte permettre à la fenêtre pour finir d'être détruit avant qu'il ne soit créé – Tyler

Répondre

0

Le problème disparaît-il si vous transmettez NULL ou GetDesktopWindow() en tant que paramètre HWND? Si oui, alors vous avez probablement raison. Vous pouvez également essayer de valider le HWND à l'avance avec la fonction IsWindow() ou IsWindowVisible(). (Bien que je ne sache pas si les comportements de ces fonctions sont fiables si la fenêtre en question est en train d'être détruite.)

Questions connexes