3.9 Strukturen für Canvas-Funktionen

Die in den nachfolgenden Kapiteln vorgestellte Struktur dient als Parameter für alle Canvas-Funktionen. Diese Struktur sowie die dazu gehörende Funktion sind Fenstersystem abhängig.

3.9.1 Struktur DM_CanvasUserArgs für Microsoft Windows

Für das Fenstersystem Microsoft Windows sieht die Definition der Canvas-Struktur wie folgt aus:

typedef struct {

  DM_ID       object;

  int         reason;

  HWND        hwnd;

  UINT        message;

  WPARAM      wParam;

  LPARAM      lParam;

  LRESULT     mresult;

 

  int         x;

  int         y;

  int         width;

  int         height;

  HANDLE      hdc;

 

  DM_Pointer  userdata;

} DM_CanvasUserArgs;

Bedeutung der Elemente

DM_ID object

In diesem Element wird die DM-ID des Canvas-Objektes übergeben.

int reason

In diesem Element wird der Grund für den Aufruf der Canvas-Funktion übergeben. Dabei gibt es zur Zeit folgende Möglichkeiten:

Reason

Bedeutung

CCR_expose

Es liegt ein Redraw-Ereignis für die Canvas vor.

CCR_input

Der Benutzer hat eine Eingabe mit der Maus oder der Tastatur vorgenommen.

CCR_reschg

Eine Canvas-Ressource wurde verändert.

CCR_resize

Die Canvas wurde in ihrer Größe verändert.

CCR_start

Die Canvas ist auf dem Bildschirm sichtbar gemacht worden.

CCR_stop

Die Canvas ist nicht mehr auf dem Bildschirm sichtbar.

CCR_winmsg

Eine Microsoft Windows-Nachricht ist eingetroffen. Bei dieser Task ist der Rückgabewert der Canvas-Funktion von entscheidender Bedeutung. Ein TRUE heißt, dass die Message verarbeitet wurde; "mresult" wird an Microsoft Windows zurückgegeben. Ein FALSE heißt, dass die Message nicht verarbeitet wurde, der Dialog Manager führt die Default-Aktion aus.

HWND hwnd

HandleID des Microsoft Windows Fensters.

UINT message
WPARAM wParam
LPARAM lParam
LRESULT mresult

Dies sind die originalen Message-Parameter von Microsoft Windows. Wenn keine Message vorhanden ist, hat das Element "message" den Wert 0. Die Elemente wParam, lParam und mresult sind nur gültig, wenn das Element "message" ungleich 0 ist.

int x

In diesem Element wird die X-Koordinate der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

int y

In diesem Element wird die Y-Koordinate der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

int width

In diesem Element wird die Breite der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

int height

In diesem Element wird die Höhe der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

HANDLE hdc

Dieses Element ist der device-context-handle, der zum Zeichnen in die Canvas benötigt wird.

DM_Pointer userdata

In diesem Element kann die Callback-Funktion beliebige anwendungsbezogene Daten speichern. Die gespeicherten Werte werden bei jedem Aufruf an die Canvas-Funktion mit übergeben. Für weitere Erläuterungen kann das Manual "Objekte, Attribute und Methoden" für das Attribut "AT_CanvasData" herangezogen werden.

Anmerkung

Die Belegung dieser Struktur ist immer abhängig von der aktuellen Task. Die Elemente object, reason und hwnd sind immer belegt, die Belegung der anderen Strukturelemente kann der nachfolgenden Tabelle entnommen werden:

Task

Belegtes Element

Bedeutung

CCR_expose

x, y, width, height

Dimension des Update-Rechtecks

 

hdc

Device-Context-Handle zum Zeichnen in die Canvas.

CCR_input

x, y

Diese Felder sind belegt, falls das ursprüngliche Ereignis ein "ButtonPress"-Ereignis gewesen ist.

CCR_reschange

x, y

Koordinate der linken oberen Ecke der Nutzfläche der Canvas bezüglich des eigentlichen Canvas-Fensters.

 

width, height

Dimension der Canvas-Nutzfläche.

CCR_resize

x, y

Koordinate der linken oberen Ecke der Nutzfläche bezüglich des Canvas-Fensters.

 

width, height

Dimension der Canvas-Nutzfläche.

CCR_start

x, y

Koordinate der linken oberen Ecke der Nutzfläche der Canvas bezüglich des eigentlichen Canvas-Fensters.

 

width, height

Dimension der Canvas-Nutzfläche.

CCR_winmsg

message, wParam, lParam, mresult

In diesen Elementen werden die original Windows Messages weitergereicht. Die möglichen Werte und Bedeutung dieser Elemente können dem Microsoft Windows Manual entnommen werden.

3.9.2 Struktur DM_CanvasUserArgs für Motif

Für das Fenstersystem Motif sieht die Definition der Canvas-Struktur wie folgt aus:

typedef struct {

  DM_ID       object;

  int         reason;

 

#ifdef _XLIB_H_

  Xevent      *xevent;

  Window      window;

#else

  DM_Pointer  xevent;

  long        window;

#endif

 

#ifdef _XtIntrinsic_h

  Widget      widget;

#else

  DM_Pointer  widget;

#endif

 

  DM_Int2     x;

  DM_Int2     y;

  DM_UInt2    width;

  DM_UInt2    height;

 

  DM_Pointer  userdata;

} DM_CanvasUserArgs;

Bedeutung der Elemente

DM_ID object

In diesem Element wird die DM-ID des Objekts übergeben, das diesen Funktionsablauf ausgelöst hat, also die Canvas, zu der die aufgerufene Funktion gehört.

int reason

In diesem Element teilt der DM der Anwendung mit, warum die Canvas-Funktion aufgerufen wurde.

Dabei gibt es folgende als Konstanten definierte Möglichkeiten:

Reason

Bedeutung

CCR_expose

Es liegt ein Redraw-Ereignis für die Canvas vor.

CCR_focus_in

Die Canvas hat den Eingabefokus bekommen.

CCR_focus_out

Die Canvas hat den Fokus verloren.

CCR_input

Der Benutzer hat eine Eingabe mit der Maus oder der Tastatur vorgenommen.

CCR_reschg

Eine Canvas-Ressource wurde verändert.

CCR_resize

Die Canvas wurde in ihrer Größe verändert.

CCR_start

Die Canvas ist auf dem Bildschirm sichtbar gemacht worden.

CCR_stop

Die Canvas ist nicht mehr auf dem Bildschirm sichtbar.

CCR_xevent

Es liegt ein beliebiges anderes X-Event für die Canvas vor.

Xevent *xevent

In diesem Parameter wird das Orginal-X-Event an die Anwendung übergeben. Falls kein X-Event vorhanden ist, ist dieser Parameter ein NULL-Pointer. Diese Ereignisse werden in den entsprechenden X-Manuals erklärt.

Window window

In diesem Element wird das zugehörige X-Windows-Fenster an die Anwendung übergeben. Für eine Erklärung sei hier auf die entsprechenden X-Windows-Manuals hingewiesen.

Widget widget

In diesem Element wird die Xt-Widget Information dem Objekt übergeben.

DM_Int2 x

In diesem Element wird die X-Koordinate der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

DM_Int2 y

In diesem Element wird die Y-Koordinate der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

DM_UInt2 width

In diesem Element wird die Breite der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

DM_UInt2 height

In diesem Element wird die Höhe der Nutzfläche der Canvas bzgl. des Canvas-Fensters übergeben.

DM_Pointer userdata

In diesem Element kann die Callback-Funktion beliebige anwendungsbezogene Daten speichern. Die gespeicherten Werte werden bei jedem Aufruf an die CanvasFunktion mit übergeben. Für weitere Erläuterungen kann das Manual "Objekte, Attribute und Methoden" für das Attribut "AT_CanvasData" herangezogen werden.

Anmerkung

Die Belegung dieser Struktur ist immer abhängig von der aktuellen Task. Die Elemente "object" und "reason" sind immer belegt, die Elemente "window", "widget" und "xevent" sind soweit verfügbar immer belegt, die Belegung der anderen Strukturelemente kann der nachfolgenden Tabelle entnommen werden:

Task

Belegtes Element

Bedeutung

CCR_expose

x, y, width, height

Dimension des Update-Rechtecks

CCR_input

x, y

Diese Felder sind belegt, falls das ursprüngliche Ereignis ein "ButtonPress"-Ereignis gewesen ist.

CCR_reschange

x, y

Koordinate der linken oberen Ecke der Nutzfläche der Canvas bezüglich des eigentlichen Canvas-Fensters.

 

width, height

Dimension der Canvas-Nutzfläche.

CCR_resize

x, y

Koordinate der linken oberen Ecke der Nutzfläche bezüglich des Canvas-Fensters, falls die Werte schon verfügbar sind, sonst 0.

 

width, height

Dimension der Canvas-Nutzfläche, falls die Werte schon verfügbar sind sonst 0.

CCR_start

x, y

Koordinate der linken oberen Ecke der Nutzfläche der Canvas bezüglich des eigentlichen Canvas-Fensters.

 

width, height

Dimension der Canvas-Nutzfläche.