Definition von Antworttabelleneinträgen

Antwort-Tabellen    

Die Definition von Antworttabelleneinträgen erfolgt zwischen den beiden Makros DEFINE_RESPONSE_TABLEx und END_RESPONSE_TABLE. Antworttabelleneinträge verbinden eine Botschaft mit einer speziellen Elementfunktion, die auf eine oder mehrere bestimmte Botschaften antwortet:

DEFINE_RESPONSE_TABLE1(CMouseWindow, TWindow)
EV_WM_LBUTTONDOWN,
EV_WM_RBUTTONDOWN,
END_RESPONSE_TABLE;

Wie wir hier sehen können, müssen bei der Definition die Einträge immer mit einem Kommata abgeschlossen werden.

ObjectWindows stellt eine große Anzahl an Makros zur Definition von Antworttabelleneinträgen bereit.

Vordefinierte Botschaftsmakros

Diese existieren für die Standardbotschaften von Windows, wie z.B. WM_CHAR, WM_RBUTTONDOWN, WM_RBUTTONUP usw. Der Name eines vordefinierten Makros setzt sich aus dem Präfix EV_ und dem Namen der Standardbotschaft zusammen, also EV_WM_CHAR, EV_WM_RBUTTONDOWN, EV_WM_RBUTTONUP usw. Die Prototypen und Namen der mit diesen Makros assozierten Antwortfunktionen sind ebenfalls vordefiniert. Dabei setzt sich der Name einer vordefinierten Antwortfunktion aus dem Präfix Ev und dem Namen der Nachricht ohne WM_ zusammen. Der Name der Nachricht beginnt dann mit einem Großbuchstaben, gefolgt von Kleinbuchstaben. An Wortgrenzen werden aber ebenfalls Großbuchstaben verwendet, z.B. EvChar, EvRButtonDown, EvRButtonUp usw.

Kommando-Botschaftsmakros

Bei Kommandobotschaften handelt es sich um WM_COMMAND-Botschaften. Zur Definition von Antworttabelleneinträgen für Kommandobotschaften gibt es folgende Makros:

EV_COMMAND(Command,Function)
 
Funktionsdeklaration: void Function()
 
Ruft die Funktion Function() auf, wenn die Kommandobotschaft Command empfangen wurde.

 

EV_COMMAND_AND_ID(Command,Function)
 
Funktionsdeklaration: void Function(WPARAM);
 
Ruft die Funktion Function() auf, wenn die Kommandonachricht Command empfangen wurde und übergibt die Kommando-ID in einem Parameter vom Typ WPARAM.

 

EV_COMMAND_ENABLE(Command,Function)
 
Funktionsdeklaration: void Function(TCommandEnabler&);
 
Dient zum automatischen Aktivieren/Deaktivieren von Kommandodialogelementen wie Menüeinträge, Toolbarschalter et cetera.

 

Makro für registrierte Botschaften

EV_REGISTERED(Msg, Function)
 
Funktionsdeklaration: LRESULT Fuction(WPARAM,LPARAM);
 
Ruft die Elementfunktion Function() auf, wenn die registrierte Nachricht Msg empfangen wurde und gibt die Botschaft unverändert weiter.

 

Makro für benutzerdefinierte Botschaften

EV_MESSAGE(Msg, Function)
 
Funktionsdeklaration: LRESULT Function(WPARAM,LPARAM);
 
Ruft die Elementfunktion Function() auf, wenn die benutzerdefinierte Nachricht Msg empfangen wurde und gibt diese unverändert weiter.

 

Dialogelement-Benachrichtigungsmakros

Diese Makros sind sogenannte Alias-Makros, die sich auch mit dem Makro EV_CHILD_NOTIFY realisieren lassen. Sie setzen sich aus dem Präfix EV_ und der korrespondierenden Benachrichtigungsbotschaft zusammen. Als Beispiel nehmen wir einmal die Benachrichtigungsbotschaft BN_CLICKED eines Schalter. Bei Verwendung von EV_CHILD_NOTIFY müssen wir folgendes schreiben:

EV_CHILD_NOTIFY(Id, BN_CLICKED, Function)

Mit einem Aliasmakro können wir die Schreibweise verkürzen und folgendes verwenden:

EV_BN_CLICKED(Id, Function)

ObjectWindows stellt eine Vielzahl solcher Aliasmakros für Schalter, Bildlaufleisten, Edit- und Listfelder, Kombinationsfelder usw. bereit. Der Funktionsprototyp ist bei diesen Makros immer

void Function();

Benachrichtigungs-Botschaftsmakros basierend auf der ID untergeordneter Fenster

Diese Makros ermöglichen die Behandlung der Botschaften auf verschiedene Weise. Wir können Benachrichtigungscodes von mehreren untergeordneten Fenstern in einer einzigen Funktion behandeln, die Behandlungscodes für jedes untergeordnete Fenster in separaten Funktionen behandeln oder vom untergeordneten Fenster selbst behandeln lassen. Folgende Makros stehen zur Verfügung:

EV_CHILD_NOTIFY(Id,Code,Function)
 
Funktionsdeklaration: void Function();
 
Ruft die Elementfunktion Function() auf, wenn die auf der Id basierende Botschaft Code empfangen wurde. Die koorespondierende Elementfunktion erhält aber keinerlei Hinweis, welche Botschaft vorgelegen hat.

 

EV_CHILD_NOTIFY_AND_CODE(Id,Code,Function)
 
Funktionsdeklaration: void Function(WPARAM);
 
Ruft die Elementfunktion Function() auf, wenn die auf der Id basierende Botschaft Code empfangen wurde und übergibt der Funktion in einem Parameter vom Typ WPARAM den Botschaftscode. Der Einsatz dieses Makros ist zum bearbeiten von verschiedenen Botschaften einer ID verwendbar. Im Gegensatz zu EV_CHILD_NOTIFY kann anhand des Parameters in der Elementfunktion festgestellt werden, welche Botschaft für die basierende ID empfangen wurde.

 

EV_CHILD_NOTIFY_ALL_CODES(Id,Function)
 
Funktionsdeklaration: void Function(WPARAM);
 
Ruft für jede auf ID basierende Nachricht die Elementfunktion Function() auf und übergibt dieser in einem Parameter vom Typ WPARAM den empfangenen Botschaftscode.Hiermit lassen sich also alle auf einer ID basierenden Botschaften an eine einzige Funktion weiterleiten. Diese kann dann auf die zu behandelnden Botschaften reagieren oder alle auf die gleiche Weise behandeln.

 

EV_CHILD_NOTIFY_AT_CHILD(Code,Function)
 
Funktionsdeklaration: void Function();
 
Mit dem Einsatz dieses Makros wird bewirkt, daß die Botschaft wieder an das untergeordnete Fenster zurückgeschickt wird. Die Elementfunktion Function() muß im untergeordneten Fenster definiert sein.

 

 

Neben den hier aufgeführten Makros stellt die OWL eine weitere Anzahl von Botschaftsmakros für andere Elemente bereit.

Antwort-Tabellen    

Stand: 24.02.00 23:42:30
© 1998 by Hans Joachim Kiefer, hajokiefer@handshake.de