home *** CD-ROM | disk | FTP | other *** search
- Erklärende Hinweise zu:
-
-
-
-
-
- " Begegnungen mit OS/2, Teil 6 "
-
- " Wenn der Text nicht in das Fenster paßt... "
-
- ( Theorie und Praxis des Scrollens mit dem PM, toolbox 9/90 )
-
-
- ( vergleiche Listing und Kommentare in "Scroll1.C" )
- ( der 2. Teil zum Thema Scolling wird voraussichtlich in 10/90 erscheinen )
-
-
-
-
-
-
-
-
-
-
- Fensterklassen und Fensterprozeduren:
-
- Was im Client eines Fensters passiert, wird gesteuert von einer
- selbstgeschriebenen Fensterprozedur wie ClientWindowProc. Die
- Beziehung zwischen dem Fenster und den zugehörigen Prozeduren erfolgt
- aber nicht direkt, sondern über den Umweg der Fensterklassen. Ganz
- allgemein gehört zu jeder Fensterklasse genau 1 Fensterprozedur.
- Jedoch können mehrere Fenster zu derselben Klasse gehören. Wenn 2
- Fenster zu derselben Fensterklasse gehören, reagieren sie gleich.
-
- In unserem Beispielprogramm wird mit WinRegisterClass die Prozedur
- ClientWindowProc der Klasse szClientClass (eigener Name) zugeordnet.
- Weil diese Klasse im 4. Argument von WinCreateStdWindow angegeben ist,
- wird für alle Messages des Client die Fensterprozedur ClientWindowProc
- aufgerufen.
-
- Abgesehen von diesen selbst zu definierenden Fensterprozeduren und
- Fensterklassen, gibt es auch PM-interne ("pre-defined") Klassen und
- Prozeduren. Da auch die internen Fensterprozeduren zu bekannten
- Klassen gehören, kann man diese benutzen und durch zusätzliche
- Filtermechanismen (zum Beispiel Subclassing) modifizieren, ohne sie im
- Detail zu kennen. Jedoch wäre es sicher jedem Programmierer noch
- lieber, wenn er die Sourcen selbst ansehen könnte, so wie es jeder
- MOTIF-Programmierer kann.
-
- Zu den internen gehört auch die Klasse der Scrollbars. Die PM-internen
- Fensterklassen haben eindeutige Nummern, die in PMWIN.h definiert
- sind: z.B. WC_SCROLLBAR oder WC_TITLEBAR für den Titel.
-
- Ein mit dem Flag FCF_VERTSCROLL in WinCreateStdWindow erzeugter
- senkrechter Scrollbar gehört also zur Klasse WC_SCROLLBAR.
-
- So wie jede Klasse ihre Nummer hat, so hat auch jedes Fenster seine
- ID: der senkrechte Scrollbar hat die ID FID_VERTSCROLL.
-
- Statt den Scrollbar mit WinCreateStdWindow und FCF_VERTSCROLL zu
- erzeugen, könnte man ihn auch mit WinCreateWindow erzeugen: diese noch
- allgemeinere Fenstergenerierungsprozedur verlangt explizit die Klasse
- ( WC_SCROLLBAR ) und die Fenster-ID. Außerdem ist der Stil des
- Fensters mit SBS_VERT anzugeben, wenn man einen senkrechten Scrollbar
- erzeugen will; beim waagrechten ist SBS_HORZSCROLL anzugeben.
-
- Scrollbars sind eine besondere Sorte von Controls: zusätzlich zu der
- PM-internen Fensterprozedur muß in der Anwendung noch eine Menge Logik
- implementiert werden: der durch FCF_VERTSCROLL erzeugte Scrollbar ist
- nur da, um in bestimmten Situationen Messages zu senden oder zu
- empfangen. In den anderen Fensterbereichen passiert dadurch aber nur
- etwas, wenn man die Reaktionen auf die vom Scrollbar abgeschickten
- Messages explizit codiert.
-
-
-
-
-
-
-
-
- Notification-Messages:
-
- Ebenso wie der Titel, die System-Menübox, die
- Minimize/Maximize-Box und der Actionbar gehören auch die
- Scrollbars zu den Kindern des Frames. Der Frame ist aber
- nicht nur der Vater, sondern auch der "Owner" dieser
- Fenster. Umgekehrt heißen diese Fenster "Controls" des
- Frames. Die Owner-Control-Beziehung hat im Unterschied
- zur Vater-Kind-Beziehung nichts mit der Anzeige und dem
- Clippen der Fenster zu tun. Die Owner-Control-Beziehung
- bestimmt, an wen Messages zwischen Fenstern
- weitergegeben werden. Ein Fenster hat stets einen Vater
- - dagegen muß ein Fenster nicht unbedingt einen Owner
- haben! Siehe auch im Kasten "Fensterbeziehungen".
-
- Controls schicken sogenannte Notification-Messages an
- ihren Owner, wenn der Benutzer mit den Controls
- kommuniziert. Der Owner verarbeitet diese Messages:
- "verarbeiten" bedeutet meist weiterleiten! Wenn der
- Benutzer irgendwo im Scrollbar klickt, schickt dieser
- eine WM_VSCROLL- (bzw. WM_HSCROLL-) Message an den
- Frame. Dieser wiederum schickt sie an den Client, dessen
- Fensterprozedur sie dann endgültig verarbeitet.
-
-
-
-
-
-
-
-
-
-
- Fensterbeziehungen:
-
- Die Beziehungen zwischen Fenstern kann man mit WinQueryWindow
- erfragen. Die wichtigsten Fragen sind die nach dem Vater und die nach
- dem Owner eines gegebenen Fensters (gegeben heißt, daß man den Handle
- des Fensters kennt). Beispielsweise erhält man den Vater von
- hwndClient mit
-
- hwndFrame = WinQueryWindow( hwndClient,
- QW_PARENT,
- FALSE );
-
- Die Beziehung zwischen dem 1. Argument und dem Handle des Ergebnis-
- Fensters wird also über das 2. Argument festgelegt: der PM unterstützt
- eine ganze Anzahl von Konstanten, die alle mit dem Präfix QW_
- beginnen. Um den Owner von hwndClient zu bestimmen, müßte man als 2.
- Argument also QW_OWNER angeben. Die anderen QW-Konstanten betreffen
- die sogenannte Z-Order der Fenster. Dies benötigen wir im Moment aber
- ebensowenig wie das 3. Argument, mit dem man Fenster sperren kann.
-
- -- ENDE --