2009-07-30 10 views
0

Je suis donc inscrit avec succès une classe de fenêtre à l'aide RegisterClassEx et créé une fenêtre à l'aide CreateWindowEx:Quelles conditions doivent être remplies pour qu'un message de fenêtre soit affiché?

m_hInstance = ::GetModuleHandle(NULL); 
... 
m_hWnd = ::CreateWindowEx(0, "CMyClassName", "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0); 

La procédure de fenêtre associée reçoit des messages 36, 129, 131 et 1, et le retour HWND est pas nul. Cependant, quand je l'appelle plus tard PostMessage (un autre thread):

bool bPosted = ::PostMessage(m_hWnd, WM_APP + 3, 0, 0); 

même si bPosted est vrai, la procédure de fenêtre est pas appelée. J'essaie de comprendre pourquoi cela devrait être. La procédure de la fenêtre est celle du MSDN example - j'avais l'intention d'ajouter un autre cas une fois que j'avais confirmé que les messages passaient.

Quelles conditions doivent être remplies pour qu'un message de fenêtre soit affiché?

Répondre

1

Il n'y a pas de conditions.

Certaines contraintes existent lors de l'utilisation de messages [0, WM_USER) mais aucune sur WM_APP.

Vérifiez-vous le code de retour de PostMessage?

Vous devriez probablement envoyer (au moins une partie) du code que vous utilisez à PostMessage, ainsi que le WndProc enregistré. Vous devez également fournir un message loop, si vous ne le faites pas. La plupart des frameworks vont cacher ce détail (au moins un peu), mais si vous travaillez directement avec win32, vous devez fournir le vôtre.

+0

J'ai mis à jour la question en réponse à certaines de vos préoccupations – Simon

+0

Le WndProc est probablement important ici. Je suppose que le message se boucle aussi, si seulement pour être complet. –

+0

J'ai ajouté un lien vers le code wndproc que j'ai utilisé. Ai-je besoin d'écrire une boucle de message? J'ai déjà reçu les quatre messages que j'ai décrits, donc j'ai supposé qu'il y avait une boucle de message en cours d'exécution. – Simon