Puis-je utiliser ma propre boucle de message dans Windows?

Je construis un programme C ++, sous Windows, en utilisant Visual Studio. Il s’appuie sur une API de base COM, qui envoie un message Windows pour notification.

Pour traiter ces messages, je vois deux possibilités:

  • Créez un formulaire Windows et appelez doModal sur celui-ci, qui devrait traiter les messages, mais comme je ne veux pas utiliser d’interface utilisateur, ce n’est pas ce que je veux faire
  • faire ma propre boucle pour le traitement des messages

Je ne sais pas ce qui est le meilleur, ou s’il y a une autre façon de traiter les messages (il y a probablement une fonction Windows qui peut lancer la boucle)

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } 

Ce n’est pas juste pour votre propre bénéfice, COM vous oblige à créer une boucle de message. COM en a besoin pour gérer les serveurs COM avec threads d’appartements, un terme coûteux pour les “composants qui ne prennent pas en charge le multi-threading”. La grande majorité d’entre eux ne le font pas.

Il est préférable de créer une fenêtre, elle ne doit pas nécessairement être visible. Cela vous donne un HWND que vous pouvez utiliser dans vos appels SendMessage (). La procédure de fenêtre que vous écrivez peut traiter les messages. De là, il devient facile de créer une interface utilisateur minimale, avec Shell_NotifyIcon par exemple. Toujours agréable lorsque vous pouvez afficher une notification en cas de problème. Tant mieux qu’un événement dans un journal que personne ne regarde jamais.

Oui, vous pouvez. Chaque thread peut avoir une boucle de message et vous n’avez besoin d’aucune fenêtre pour recevoir des messages ou les envoyer (voir PostThreadMessage ).

Il n’y a rien de mal à utiliser cette méthode si votre application est pilotée par des événements.