Re: Message Routing in Winform-Applikationen
- From: Paul Werkowitz <newsgroups@xxxxxxxxxxxxxxxx>
- Date: Tue, 31 Jul 2007 09:08:02 +0200
Am Mon, 30 Jul 2007 20:52:19 +0200 schrieb Frank Dzaebel:
Hallo Paul,
gibt es in bei WinForms eine Möglichkeit, eigene Nachrichten "von oben
nach
unten" durchlaufen lassen zu können? Ich möchte nach Möglichkeit nicht
jeden Container mit Code zur Weiterleitung ausstatten. Ich denke mal, für
Cmd-Messages sollte es sowas ja bereits geben.
Ich brauche sowas, um den Aktivierungsstatus von globalen Kommandos (z.B.
cut/copy/paste) im Editmenü bestimmen zu können.
Für .NET 2.0 WinForms-Controls ist das *direkt* nicht vorgesehen. Es gibt
aber die Möglichkeit über IMessageFilter, wodurch Du alle Events aller
Controls - egal, ob in Containern - in einem PreFilterMessage-Handler
behandeln könntest:
Hallo Frank,
vielen Dank für die Antwort. IMessageFiler + PreFilterMessage war mir schon
bekannt - wo ist denn der Unterschied zum direkten Überladen von WndProc?
In beiden Fällen habe ich Zugriff auf das gesamte Dispatching.
Wie ist denn das Verteilen von Messages im Framework? Ich möchte "oben" was
einfüllen (eine Msg mit Daten dran) und dann erreichen, dass diese durch
alle GUI-Elemente "fließt", d.h. von jedem GUI-Element "gesehen" wird. Aus
Performance-Gründen sollte dasjenige mit Focus zuerst drankommen, dann aber
auch die anderen. Wenn ein Control meint, dass die Msg von ihm zu
bearbneiten ist, soll das "Fließen" gestoppt werden können, da das Ergebnis
bereits feststeht.
Als Alternative habe ich mir überlegt, manuell folgenden Prozess zu
implementieren: Ich stelle das Control mit Focus fest, und frage dieses, ob
es die Anfrage beantworten möchte (dazu muss ich natürlich ein geeigentes
Interface machen). Wenn ja (Normalfall), stoppt der Prozess. Wenn nein,
gehe ich zum Parent, und mache dort das Gleiche (sofern dieser das
Interface implementiert). Danach frage ich alle Members des Containers (was
einen rekursiven Abstieg bedeuten kann), etc, etc. Im Prinzip ist es also
die Aufgabe, von einem Blatt eines Baumes aus den gesamten Baum zu
iterieren, bis irgendeiner "fertig" sagt.
Diese zweite Lösung wird sicher funktionieren, bedarf jedoch einiges an
manuellem Aufwand. Schön wäre es eben, wenn man eingebaute Mechanismen
verewnden könnte, wie z.B. das eingebaute Dispatching von Windows-Messages.
Ich bräuchte dann nur eine eigene Message zu definieren und das Framerwork
würde diese durch den Baum verteilen.
Das Ganze brauche ich, um z.B. den Zustand (enabled/disabled) von Menüitems
berechnen zu können (im OnIdle). Das hängt in erster Linie vom Control mit
dem Focus ab, aber nicht nur.
Grüße
Paule
.
- References:
- Message Routing in Winform-Applikationen
- From: Paul Werkowitz
- Re: Message Routing in Winform-Applikationen
- From: Frank Dzaebel
- Message Routing in Winform-Applikationen
- Prev by Date: Klassen - kapseln
- Next by Date: WPF Grid, Gridsplitter
- Previous by thread: Re: Message Routing in Winform-Applikationen
- Next by thread: Re: Message Routing in Winform-Applikationen
- Index(es):
Relevant Pages
|