Question

J'ai une application MFC GUI qui a plusieurs cadres (un peu comme le comportement Outlook'ish avec fenêtre principale, et le message / fenêtres de rendez-vous en cours de création dans de nouveaux cadres, ou Skype comme cadre à plusieurs syncronization), et je dois PostMessage malloc « ed données dans la hiérarchie de la fenêtre.

Dis, je reçois la chaîne, _wcsdup il, PostMessage (WM_NEWSTRING, ...), et le contrôle quelque part au fond les processus de la hiérarchie, ou s'il n'y a pas d'abonnés, nettoyé le get message.

Ce que je suis à la recherche en maintenant, est que tous les messages sont affichés à la discussion d'application, fil trouve le cadre actif ou le meilleur cadre en forme, passe le message à lui, cadre passe le message à la vue de lui, la vue passe un message à sous-vue et ainsi de suite, s'il n'y a pas en vue de traiter le message, il get free'd.

Le problème est que ces commandes sont assez fatigant chaînage d'écrire, comme je dois dupliquer le code de transfert des messages dans chaque classe CWnd je. En même temps, le nettoyage des ressources est assez désagréable, parce que s'il n'y a pas de fenêtre pour attraper le message, quelqu'un doit appeler gratuitement. Par conséquent simplement afficher le message à la pompe principale du message sans manipulation supplémentaire, en espérant que quelqu'un sera toujours attraper, n'est pas une approche valable. PostMessage retourne S_OK, personne ne voit le message comme traitable, et il est à gauche ballants.

Y at-il une meilleure approche correcte pour ce que je cherche?

Était-ce utile?

La solution

Je ne jamais utiliser PostMessage que vous décrivez. Ma solution implique souvent une poignée de main:

// From CNotifierBlah
PostMesssage(hWnd, UWM_NEW_DATA, 0, 0);
//
LRESULT CDestinationWnd::OnNewData(WPARAM wParam, LPARAM lParam)
{
    CNewData newData = GetNotifierBlah().GetNewData(); // Thread-safe getter!
}

A peu près la même chose que modèle d'observation .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top