home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************/
- /* HELLO1.C */
- /* */
- /* Minimalversion von "Hello World" für den PM */
- /* */
- /* (C) 1989,1990 Heid & TOOLBOX */
- /*****************************************************/
-
- #define INCL_WIN
-
- #include <os2.h> // PM-Include-Datei
-
- /***** Funktions-Prototypen **************************/
- MRESULT EXPENTRY ClientWindowProc( HWND hwnd,
- USHORT msg,
- MPARAM mp1,
- MPARAM mp2 );
- int cdecl main( void );
-
- /***** Programm-Variablen ***************************/
- HAB hab; // Handle fuer das Programm
- // = Programmanker
- CHAR szClientClass[] = "KlasseHello1";
- // Name der Fensterklasse
-
-
- /******** Start der main-Funktion *******************/
- int cdecl main( )
- {
- HMQ hmq; // Handle fuer die Message-Queue
- HWND hwndClient; // Handle fuer den Client-Bereich
- // des Fensters
- HWND hwndFrame; // Handle fuer das Frame-Fenster
- QMSG qmsg; // Message in der Message-Queue
- ULONG flCreateFrame; // Flaggen fuer die Erzeugung
- // der Controls
-
- hab = WinInitialize( NULL ); // Initialisiere PM
- hmq = WinCreateMsgQueue(hab, 0 ); // Erzeuge Message-Queue
-
- /****** ClientWndProc einer Klasse zuordnen *********/
- WinRegisterClass(
- hab,
- szClientClass, // Name der Fensterklasse
- ClientWindowProc, // Adresse der Fensterprozedur
- CS_SIZEREDRAW, // Klassen-Style
- 0 // keine Extra-Bytes zu reservieren
- );
-
- // welche Controls sollen eingefuegt werden
- flCreateFrame = FCF_STANDARD & ~FCF_ICON
- & ~FCF_ACCELTABLE
- & ~FCF_MENU;
-
- // Erzeugen eines Standardfensters
- hwndFrame = WinCreateStdWindow(
- HWND_DESKTOP, // Handle des Vaterfensters
- WS_VISIBLE, // Style des Frame-Fensters
- (PULONG)&flCreateFrame,
- szClientClass, // Client-Fenster-Klasse
- "", // Kein expliziter Titel
- 0L, // Style des Client-Fensters
- NULL, // Resourcen sind in EXE-Datei
- 0, // keine Identity f. Resourcen
- (PHWND)&hwndClient // Zeiger auf den Handle des
- // Client-Fensters
- );
-
- /******************************************************/
- /* "Message-processing-Loop": */
- /* Empfange und verteile Messages aus der Message- */
- /* Queue der Anwendung, bis WinGetMsg FALSE */
- /* zurueckgibt: dies geschieht dann, wenn WinGetMsg */
- /* eine WM_QUIT-Message erhielt. */
- /******************************************************/
- while( WinGetMsg( hab, (PQMSG)&qmsg, (HWND)NULL, 0, 0 ) )
- WinDispatchMsg( hab, (PQMSG)&qmsg );
-
- /***** Programmabschluss **************/
- WinDestroyWindow( hwndFrame ); // Gib alle
- WinDestroyMsgQueue( hmq ); // Resourcen
- WinTerminate( hab ); // zurueck
-
- return 0;
- }
-
-
- /******** Start der Window-Prozedur des Client *****/
- MRESULT EXPENTRY ClientWindowProc( HWND hwnd, USHORT msg,
- MPARAM mp1, MPARAM mp2 )
- {
- HPS hps; // Presentation-Space-Handle
- RECTL rectl; // Struktur Rechteck-Koordinaten
-
- /****** DER Ausgabetext **********/
- static CHAR szText[] = "toolbox, das Fenster zum Durchblicken";
-
- switch( msg )
- {
- case WM_CREATE:
- /* Hier koennte eine Einleitung stehen */
- return 0;
-
- case WM_PAINT:
- /***********************************************/
- /* hier wird der Inhalt des Clients gezeichnet */
- /***********************************************/
- // Erzeuge einen Presentation Space
- hps = WinBeginPaint( hwnd, NULL, NULL );
-
- // Ausmasse des Client-Window ermittlen
- WinQueryWindowRect( hwnd, &rectl);
-
- WinDrawText( hps, -1,
- szText, &rectl,
- CLR_NEUTRAL, CLR_BACKGROUND,
- DT_CENTER | DT_VCENTER | DT_ERASERECT );
-
- WinEndPaint( hps );
- return 0;
-
- case WM_DESTROY:
- /* Hier koennte ein Abschiedsmeldung hin */
- return 0;
-
- default:
- /***********************************************/
- /* Hierher gelangen alle anderen Events, die */
- /* von der Window-Prozedur des Client-Bereiches*/
- /* nicht explizit behandelt werden. */
- /* Dieser Fall muß(!) behandelt werden! */
- /***********************************************/
-
- return WinDefWindowProc( hwnd, msg, mp1, mp2 );
- }
- return FALSE;
- }