L’appel à DispatchMessage dans les programmes win32 est-il nécessaire?

Les programmes Win32 ont généralement une boucle de message qui appelle GetMessage ou PeekMessage , puis appelle DispatchMessage pour envoyer le message à la fenêtre poursuite de la fenêtre appropriée.

Mais y a-t-il un besoin de le faire réellement? Puis-je simplement rechercher l’object MSG directement dans la boucle de message et effectuer les actions nécessaires sans appeler DispatchMessage ? Je parle de cas où j’ai une seule fenêtre sans autres contrôles de fenêtre, par exemple si la fenêtre est uniquement utilisée comme fenêtre d’affichage direct3d, les messages seront toujours dirigés vers la seule fenêtre.

La plupart du temps, je suis simplement curieux, mais cela pourrait aussi rendre certains aspects de mon code plus propres.

Vous appelez DispatchMessage pour que le message soit remis à la fenêtre appropriée, à son “proc de fenêtre”. Vous pensez avoir une seule fenêtre, mais est-ce vraiment la seule? COM créera des fenêtres d’assistance, d’autres sous-systèmes pourront également créer des fenêtres masquées d’aide, qui vont envoyer des messages envoyés à des files d’attente de messages partagés et adressées à ces fenêtres. Sans avoir à réfléchir beaucoup à ces détails, vous disposez d’une API pour les envoyer. Et vous devez le faire parce que ces sous-systèmes reposent sur la présence d’une pompe à messages.

Spy++ outil Spy++ Windows SDK peut vous aider à voir combien de fenêtres vous avez réellement.

Si vous avez en effet la seule fenêtre, le fait que votre gestionnaire soit appelé par les composants internes de DispatchMessage ou directement par votre pompe de messages ne fait pas une grande différence.