J'ai une application MFC GUI qui a plusieurs cadres (comme le comportement Outlook'ish avec la fenêtre principale, et les fenêtres de message/rendez-vous étant créés dans de nouveaux cadres, ou Skype comme multi synchronisation de trame), et j'ai besoin de PostMessage malloc'ed données à travers la hiérarchie de la fenêtre. Dites, j'obtiens la chaîne, _wcsdup it, PostMessage (WM_NEWSTRING, ...), et, le contrôle au fond de la hiérarchie la traite, ou s'il n'y a pas d'abonnés, le message get est nettoyé. Ce que je regarde maintenant, c'est que tous les messages sont postés dans le thread d'application, le thread trouve le cadre actif ou le cadre le mieux adapté, passe le message, le cadre passe le message à sa vue, la vue passe le message à subview et ainsi de suite, s'il n'y a pas de vue pour traiter le message, il est gratuit.Comment concevoir une chaîne PostMessage plus propre dans WinApi/MFC
Le problème est que ces commandes de chaînage sont assez fatigantes à écrire, car je dois dupliquer le code de transfert de message dans chaque classe CWnd que j'ai. Dans le même temps, le nettoyage des ressources est assez désagréable, car s'il n'y a pas de fenêtre pour attraper le message, quelqu'un doit appeler le gratuit. Par conséquent, il suffit de poster le message sur le message principal de la pompe sans manipulation supplémentaire, en espérant que quelqu'un l'attrapera toujours, n'est pas une approche valable. PostMessage renvoie S_OK, personne ne voit le message comme traitable, et il est laissé en suspens.
Existe-t-il une meilleure approche pour ce que je cherche?
Il n'y a aucune raison de ne pas simplement utiliser SendMessage, résout trivialement le problème de gestion de la mémoire. Difficile de voir pourquoi vous n'utiliseriez pas simplement un appel de méthode. –
Plusieurs threads ... SendMessage est une sérialisation efficace + un commutateur de contexte. – Coder
Si vous êtes décidé à utiliser cette méthode, pourquoi ne pas ajouter un récepteur de messages à la toute fin de votre chaîne de transmission de message qui nettoiera tout message le rendant si loin? – Jon