Frank Eckgold Systemprogrammierung OS/22.x ---- Aus dem Bereich Computerliteratur Programmieren mit Turbo C++ 3.1 fur Windows von Gerd Kebschull Arbeiten mit MS-DOS QBasic von Michael Halvorson und David Rygmyr (Ein Microsoft PressNieweg-Buch) Microsoft BASIC PDS 7.1 von Frederik Ramm Effektiv Starten mit Visual Basic von Dagmar Sieberichs und Hans-Joachim Kruger Das Vieweg Buch zu Visual Basic 2.0 fur Windows von Andreas Maslo Das Vieweg Buch zu Borland Pascal 7.0 von Andreas Maslo Das Vieweg Buch zu Borland C++ 3.0 von Axel Kotulla Systemprogrammierung OS/2 2.x von Frank Eckgold Windows Power-Programmierung von Michael Schumann 100 Rezepte fur Turbo Pascal von Erik Wischnewski Die Turbo Vision zu Turbo Pascal 7.0 von Arnulf Wallrabe Grafik und Animation mit Borland Pascal 7.0 von Andreas Bartel ~--Vieweg Frank Eckgold Systemprogrammierung O S / 2 2 . x I I vleweg Das in diesem Buch enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Der Autor und der Verlag iibernehmen infolgedessen keine Verantwortung und werden keine daraus folgende oder sonstige Haftung iibernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Aile Rechte vorbehalten © Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, BraunschweiglWiesbaden, 1993 Softcover reprint of the hardcover 1st edition 1993 Der Verlag Vieweg ist ein Unternehmen der Verlagsgruppe Bertelsmann International. Das Werk einschlieBlich aller seiner Teile ist urheberrechtlich geschiitzt. Jede Verwertung auBerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzullissig und strafbar. Das gilt insbesondere flir Vervielfaltigungen, Ubersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Gedruckt auf sliurefreiem Papier ISBN 978-3-322-87234-0 ISBN 978-3-322-87233-3 (eBook) DOl 10.1007/978-3-322-87233-3 v Vorwort Das Betriebssystem OS/2 hat aus Sicht des Programmentwicklers mit seiner Version 2.0 einen Vollstandigkeitsgrad erreicht, der eine emsthafte Konkurrenz zu bereits seit langem etablierten preemptiven Multitaskingsystemen erlaubt. NatUrlich sind Fortentwicklungen und dam it weitere Versionen des OS/2 zu er- warten; fur den Programmentwickler jedoch dUrfte sich - zumindest flir die be- reits angekUndigte Version 2.1 - kaum nennenswertes andem. Die jetzt schon in der Version 2.0 realisierte Funktions- und Nachrichtenstruktur wird zumindest flir die nachsten Versionen des OS/2 nur geringfligig erweitert werden. Damit bleiben auch die im vorliegenden Buch beschriebenen Programmentwick- lungsschnittstellen fur die nachsten Versionen aktuell und umfassend - daher kann die Titelformulierung OS/2 2.xx vertreten werden Inhaltsverzeichnis vii INHALT SVERZEICHNIS 1 Einleitung ...................................................................................................... 1 1 Was leistet OS/2 2.0? .......................................................................... 1 1.2 Struktur des Betriebssystems ............................................................ 2 1.2.1 API : Applikation Programming Interface .......................... 2 1.2.2 GUI : Graphic User Interface. .............................................. 3 1.2.3 GPI : Graphic Programming Interface ................................. 4 1.2.4 Weitere Funktionsbereiche .................................................. 4 1.3 Notwendige Vorkenntnisse ............................................................... 5 1.4 Aufbau des Buchs. ............................................................................. 7 2 Grundbegriffe ............................................................................................... 11 2.1 Beispielprogramm : hallo _1.c ........................................................... 13 2.2 hallo 2.c: ... etwas mehr Aufwand ................................................... 19 3 Fenster ........................................................................................................... 33 3.1 Definitionen. ...................................................................................... 33 3.1.1 PM-Oberfliichenfenster. ....................................................... 33 3.1.2 Fensterposition und FenstergroBe. ....................................... 34 3.1.3 Eltem -Kindbeziehung ........................................................ 34 3.1.4 Besitz von Fenstem. ............................................................. 35 3.1.5 Programmfenster .................................................................. 35 3.1.6 Eingabefocus ........................................................................ 36 3.1.7 Modale und nichtmodale Dialogfenster. .............................. 36 3.1.8 System-modale Fenster. ....................................................... 37 3.1.9 Fensterklassen ...................................................................... 37 3.2 Nachrichten ....................................................................................... 38 3.3 Fensterprogrammierung .................................................................... 41 3.3.1 Nachrichtenbearbeitung : WM-PAINT. ............................... 41 3.3.2 Beziehung zu anderen Fenstem ........................................... 43 3.3.3 FenstergroBe und Fensterposition ....................................... 44 3.3.4 Fenstertitel. ........................................................................... 46 3.3.5 Fensterrahmen invertieren ................................................... 47 3.3.6 Einfache Nachrichtenboxen ................................................. 48 3.3.7 Fehlerbestimmung. ............................................................... 49 3.3.8 Kreieren von Dialogkontrollelementen ............................... 50 3.3.9 Handle von Kontrollelementen. ........................................... 52 3.3.10 Abfrage von Systemparametem ........................................ 53 viii Inhaltsverzeichnis 3.4 Fenster : Funktionen ......................................................................... 54 3.5 Fenster: Datentypen und Strukturen ................................................ 119 3.6 Fenster: Nachrichten ......................................................................... 122 3.7 Makrodefinitionen. ............................................................................ 128 4 Dialogprogrammierung ............................................................................... 131 4.1 Einfiihrung......................................................................................... 131 4.2 Definitionen. ...................................................................................... 131 4.3 Definition eines Dialogs. ................................................................... 134 4.4 Offnen und Bearbeiten eines Dialogs ............................................... 136 4.5 SchlieBen eines Dialogs .................................................................... 138 5 Kontrollelemente .......................................................................................... 141 5.1 Editorfeld (entry field) ...................................................................... 142 5.1.1 Programmierung. .................................................................. 142 5.1.2 Stilangaben. .......................................................................... 146 5.1.3 Ereignismeldung .................................................................. 146 5.1.4 Nachrichten an das Kontrollelement.. ................................. 147 5.2 Mehrfachzeilen-Editierfeld (MLE) ................................................... 152 5.2.1 Programmierung. .................................................................. 152 5.2.2 Stilangaben. .......................................................................... 155 5.2.3 Ereignismeldung .................................................................. 155 5.2.4 Nachrichten an das Kontrollelement .................................. 159 5.2.5 Datenstrukturen. ................................................................... 175 5.3 Listboxen und Comboboxen ............................................................. 177 5.3.1 Programmierung. .................................................................. 177 5.3.2 Stilangaben. .......................................................................... 182 5.3.3 Ereignismeldung .................................................................. 182 5.3.4 Nachrichten an das Kontrollelement.. ................................. 183 5.3.5 Datenstrukturen .................................................................... 190 5.3.6 Stilangaben. .......................................................................... 190 5.3.7 Ereignismeldung .................................................................. 191 5.3.8 Nachrichten an das Kontrollelement.. ................................. 191 5.4 Auswahlknopf(button)) .................................................................... 194 5.4.1 Programmierung. .................................................................. 194 5.4.2 Stilangaben. .......................................................................... 196 5.4.3 Ereignismeldung .................................................................. 197 5.4.4 Nachrichten an das Kontrollelement.. ................................. 198 5.5 Drehknopf(spinbutton). .................................................................... 202 5.5.1 Programmierung. .................................................................. 202 Inhaltsverzeichnis ix 5.5.2 Stilangaben ........................................................................... 203 5.5.3 Ereignismeldung .................................................................. 204 5.5.4 Nachrichten an das Kontrollelement.. ................................. 205 5.6 StaticText .......................................................................................... 209 5.6.1 Programmierung. .................................................................. 209 5.6.2 Stilangaben. .......................................................................... 209 5.6.3 Ereignismeldung .................................................................. 211 5.6.4 Nachrichten an das Kontrollelement.. ................................. 211 5.7 Schieber (slider) ................................................................................ 212 5.7.1 Programmierung. .................................................................. 212 5.7.2 Stilangaben ........................................................................... 214 5.7.3 Ereignismeldung .................................................................. 215 5.7.4 Nachrichtenan das Kontrollelement.. ................................. 216 5.7.5 Datenstrukturen .................................................................... 222 5.8 Rollbalken (scrollbar~ ....................................................................... 223 5.8.1 Programmierung. .................................................................. 223 5.8.2 Stilangaben. .......................................................................... 229 5.8.3 Ereignismeldung .................................................................. 229 5.8.4 Nachrichten an das Kontrollelement ................................... 231 5.8.5 Datenstrukturen .................................................................... 232 5.9 Werteset (value set) ........................................................................... 234 5.9.1 Programmierung. .................................................................. 234 5.9.2 Stilangaben. .......................................................................... 237 5.9.3 Ereignismeldung .................................................................. 237 5.9.4 Nachrichten an das Kontrollelement.. ................................. 238 5.9.5 Datenstrukturen. ................................................................... 243 6 Komplexe Kontrollelemente ........................................................................ 245 6.1 Dateiauswahl (file dialog) ................................................................. 246 6.1.1 Programmierung. .................................................................. 246 6.1.2 Stilangaben. .......................................................................... 247 6.1.3 Nachrichten an das Kontrollelement.. ................................. 248 6.1.4 Datenstrukturen .................................................................... 250 6.2 Zeichensatzauswahl (font dialog) ..................................................... 251 6.2.1 Programmierung. .................................................................. 251 6.2.2 Stilangaben. .......................................................................... 251 6.2.3 Nachrichten an das Kontrollelement.. ................................. 252 6.2.4 Datenstrukturen .................................................................... 255 6.3 Notizbuch (notebook). ....................................................................... 257 6.3.1 Programmierung. .................................................................. 257 x Inhaltsverzeichnis 6.3.2 Stilangaben. .......................................................................... 263 6.3.3 Ereignismeldung .................................................................. 264 6.3.4 Nachrichten an das Kontrollelement.. ................................. 264 6.3.5 Datenstrukturen .................................................................... 273 6.4 Container ........................................................................................... 273 6.4.1 Programmierung. .................................................................. 273 6.4.2 Stilangaben. .......................................................................... 278 6.4.3 Ereignismeldung .................................................................. 279 6.4.4 Nachrichten an das Kontrollelement.. ................................. 283 6.4.5 Datenstrukturen .................................................................. 298 6.5 Funktionen. ........................................................................................ 311 6.6 Nachrichten ....................................................................................... 329 7 Menueprogrammierung. .............................................................................. 339 7.1 Definitionen. ...................................................................................... 339 7.2 Gestaltung von Menues. .................................................................... 340 7.3 Abfrage von Menueaktionen ............................................................ 343 7.4 Darstellene ines Popupmenues. ......................................................... 345 7.5 Manipulation von Menuezeilen ........................................................ 347 7.6 Menue : Funktionen .......................................................................... 349 7.7 Menuekontrolstil ............................................................................... 352 7.8 Ereignismeldung. ............................................................................... 353 7.9 Nachrichten an Menues. .................................................................... 355 7.10 Datenstrukturen ............................................................................... 365 8 Mauszeiger und Cursor ............................................................................... 367 8.1 Position des Mauszeigers .................................................................. 367 8.2 Darstellung des Mauszeigers. ............................................................ 367 8.3 Programmierung des Mauszeigers .................................................... 368 8.4 Programmierung des Cursors. ........................................................... 370 8.5 Mauszeiger: Funktionen. .................................................................. 372 8.6 Textcursor : Funktionen .................................................................... 383 9 Zeitgeber (Timer) ......................................................................................... 387 9.1 Programmierung. ............................................................................... 388 9.2 Timer : Funktionen. ........................................................................... 390 9.3 Ereignismeldung. ............................................................................... 391 Inhaltsverzeichnis xi 10 Tastaturabfrage .......................................................................................... 393 10 .1 Programmierung. ............................................................................. 393 10.2 Ereignismeldung: WM_CHAR. ..................................................... 394 10.3 Definition Virtueller Tastencode .................................................... 396 11 Grafik : Definitionen .................................................................................. 399 11.1 Elementarobjekte. ............................................................................ 399 11.2 Darstellungsmethode. ...................................................................... 401 11.3 Programmierungsgrundsatze. .......................................................... 402 11.4 Prasentationsraume .......................................................................... 402 11.5 Geratekontexte ................................................................................ 404 11.6 Koordinatenraume ........................................................................... 404 11.7 Transformationen ............................................................................ 406 11.7.1 Skalierungstransformation ................................................. 408 11.7.2 Rotationstransformation .................................................... 409 11.7.4 Scherungstransformation ................................................... 410 11.8 Ausschneidebereiche (clipping). ..................................................... 410 11.8.1 Ausschneidepfad im Weltkoordinatensystem ................... 411 11.8.2 Ausschneidepfad im Modellraum. ..................................... 411 11.8.3 Ausschneidebereich im Seitenkoordinatensystem ............ 412 11.8.4 Ausschneidebereiche im Gerateraum ................................ 412 12 Grafikprogrammierung ............................................................................. 413 12.1 Prasentationsraum und GeratekontexL .......................................... 413 12.2 Primitivattribute .............................................................................. 415 12.3 Linienprimitive ................................................................................ 417 12.4 Kreisbogen ...................................................................................... 420 12.4.1 Kreis urn Mittelpunkt... ...................................................... 422 12.4.2 Ellipse durch 3 Punkte ....................................................... 423 12.4.3 Kreisbogen durch 3 Punkte ................................................ 424 12.5 Komplexe Kurven ........................................................................... 425 12.5.1 Filletkurven ........................................................................ 426 12.5.2 Splines ................................................................................ 427 12.6 Punktsymbole (marker) ................................................................... 428 12.7 Fullbereiche ..................................................................................... 430 12.8 Ausschnittbereiche .......................................................................... 434 12.8.1 Bereich aus Vektorzeichen ................................................ 435 12.9 Textausgabe ..................................................................................... 436 12.9.1 Zeichenmodus .................................................................... 438 12.9.2 Winkel der Textausgaben .................................................. .438