[C++/Windows]question simplette de debutant: sur GetMessage
2 réponses
heinquoi
Bjr,
Dans de nbreux exemple de code Windows en C++, je vois
GetMessage(&msg, NULL, 0,0)
Est ce que pour optimiser il ne faudrait pas plutot ecrire:
GetMessage(&msg, hWnd, 0,0) // hWnd = HWND de la fenetre
En effet le 2eme argument correspont au HWND de la fenetre de l'application
Cela devrait filtrer deja une partie des message et eviter que tout les
messages ne soit envoyé à Translatemessage.
...Sauf si pour chaque thread creé il y une file de message de creer .
Je sais pas . Pourriez vous m'aider à comprendre.
Cordialement
H
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Arnaud Debaene
heinquoi wrote:
Bjr, Dans de nbreux exemple de code Windows en C++, je vois GetMessage(&msg, NULL, 0,0)
Est ce que pour optimiser il ne faudrait pas plutot ecrire: GetMessage(&msg, hWnd, 0,0) // hWnd = HWND de la fenetre
En effet le 2eme argument correspont au HWND de la fenetre de l'application Cela devrait filtrer deja une partie des message et eviter que tout les messages ne soit envoyé à Translatemessage.
Et tu les traiterais où et quand ces autres messages?
La doc est claire : hWnd : [in] Handle to the window whose messages are to be retrieved. The window must belong to the calling thread. The NULL value has a special meaning: NULL : GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread using the PostThreadMessage function.
Il peut y avoir plus d'une fenêtre mère créée dans une application et le pompe à message du thread GUI doit traiter les messages pour toutes ces fenêtres, plus les messages postés par PostThreadMessage.
...Sauf si pour chaque thread creé il y une file de message de creer .
Je ne comprends pas... La file de messages est créée automatiquement pour un thread la première fois qu'une fenêtre est créée ou rattachée à ce thread, mais il y a une file par thread, pas par fenêtre.
Arnaud MVP - VC
heinquoi wrote:
Bjr,
Dans de nbreux exemple de code Windows en C++, je vois
GetMessage(&msg, NULL, 0,0)
Est ce que pour optimiser il ne faudrait pas plutot ecrire:
GetMessage(&msg, hWnd, 0,0) // hWnd = HWND de la fenetre
En effet le 2eme argument correspont au HWND de la fenetre de
l'application Cela devrait filtrer deja une partie des message et
eviter que tout les messages ne soit envoyé à Translatemessage.
Et tu les traiterais où et quand ces autres messages?
La doc est claire :
hWnd : [in] Handle to the window whose messages are to be retrieved. The
window must belong to the calling thread. The NULL value has a special
meaning:
NULL : GetMessage retrieves messages for any window that belongs to the
calling thread and thread messages posted to the calling thread using the
PostThreadMessage function.
Il peut y avoir plus d'une fenêtre mère créée dans une application et le
pompe à message du thread GUI doit traiter les messages pour toutes ces
fenêtres, plus les messages postés par PostThreadMessage.
...Sauf si pour chaque thread creé il y une file de message de creer .
Je ne comprends pas... La file de messages est créée automatiquement pour un
thread la première fois qu'une fenêtre est créée ou rattachée à ce thread,
mais il y a une file par thread, pas par fenêtre.
Bjr, Dans de nbreux exemple de code Windows en C++, je vois GetMessage(&msg, NULL, 0,0)
Est ce que pour optimiser il ne faudrait pas plutot ecrire: GetMessage(&msg, hWnd, 0,0) // hWnd = HWND de la fenetre
En effet le 2eme argument correspont au HWND de la fenetre de l'application Cela devrait filtrer deja une partie des message et eviter que tout les messages ne soit envoyé à Translatemessage.
Et tu les traiterais où et quand ces autres messages?
La doc est claire : hWnd : [in] Handle to the window whose messages are to be retrieved. The window must belong to the calling thread. The NULL value has a special meaning: NULL : GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread using the PostThreadMessage function.
Il peut y avoir plus d'une fenêtre mère créée dans une application et le pompe à message du thread GUI doit traiter les messages pour toutes ces fenêtres, plus les messages postés par PostThreadMessage.
...Sauf si pour chaque thread creé il y une file de message de creer .
Je ne comprends pas... La file de messages est créée automatiquement pour un thread la première fois qu'une fenêtre est créée ou rattachée à ce thread, mais il y a une file par thread, pas par fenêtre.
Arnaud MVP - VC
Manuel Leclerc
Arnaud Debaene a écrit:
[...] La file de messages est créée automatiquement pour un thread la première fois qu'une fenêtre est créée ou rattachée à ce thread, [...]
Pas tout à fait. La file est créée au premier appel dans User32 et ce n'est pas forcément lié à une création de fenêtre. On peut faire des GetMessage dans un thread sans fenêtre, ça marche.
Arnaud Debaene a écrit:
[...] La file de messages est créée automatiquement
pour un thread la première fois qu'une fenêtre est
créée ou rattachée à ce thread, [...]
Pas tout à fait. La file est créée au premier appel
dans User32 et ce n'est pas forcément lié à une création
de fenêtre. On peut faire des GetMessage dans un thread
sans fenêtre, ça marche.
[...] La file de messages est créée automatiquement pour un thread la première fois qu'une fenêtre est créée ou rattachée à ce thread, [...]
Pas tout à fait. La file est créée au premier appel dans User32 et ce n'est pas forcément lié à une création de fenêtre. On peut faire des GetMessage dans un thread sans fenêtre, ça marche.