home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 01 / grdlagen / hello1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-03  |  5.0 KB  |  138 lines

  1. /*****************************************************/
  2. /*                  HELLO1.C                         */
  3. /*                                                   */
  4. /*    Minimalversion von "Hello World" für den PM    */
  5. /*                                                   */
  6. /*     (C) 1989,1990 Heid & TOOLBOX                  */
  7. /*****************************************************/
  8.  
  9. #define INCL_WIN
  10.  
  11. #include <os2.h>     // PM-Include-Datei
  12.  
  13. /***** Funktions-Prototypen **************************/
  14. MRESULT EXPENTRY ClientWindowProc( HWND hwnd,
  15.                                    USHORT msg,
  16.                                    MPARAM mp1,
  17.                                    MPARAM mp2 );
  18. int cdecl main( void );
  19.  
  20. /***** Programm-Variablen ***************************/
  21. HAB  hab;                  // Handle fuer das Programm
  22.                            // = Programmanker
  23. CHAR szClientClass[] = "KlasseHello1";
  24.                            // Name der Fensterklasse
  25.  
  26.  
  27. /********  Start der main-Funktion *******************/
  28. int cdecl main(  )
  29. {
  30.   HMQ   hmq;          // Handle fuer die Message-Queue
  31.   HWND  hwndClient;   // Handle fuer den Client-Bereich
  32.                       //        des Fensters
  33.   HWND  hwndFrame;    // Handle fuer das Frame-Fenster
  34.   QMSG  qmsg;         // Message in der Message-Queue
  35.   ULONG flCreateFrame;  // Flaggen fuer die Erzeugung
  36.                         //         der Controls
  37.  
  38.   hab = WinInitialize( NULL );       // Initialisiere PM
  39.   hmq = WinCreateMsgQueue(hab, 0 ); // Erzeuge Message-Queue
  40.  
  41.   /****** ClientWndProc einer Klasse zuordnen *********/
  42.   WinRegisterClass(
  43.      hab,
  44.      szClientClass,      // Name der Fensterklasse
  45.      ClientWindowProc,   // Adresse der Fensterprozedur
  46.      CS_SIZEREDRAW,      // Klassen-Style
  47.      0                   // keine Extra-Bytes zu reservieren
  48.      );
  49.  
  50.            // welche Controls sollen eingefuegt werden
  51.   flCreateFrame = FCF_STANDARD & ~FCF_ICON
  52.                                & ~FCF_ACCELTABLE
  53.                                & ~FCF_MENU;
  54.  
  55.            // Erzeugen eines Standardfensters
  56.   hwndFrame = WinCreateStdWindow(
  57.            HWND_DESKTOP,      // Handle des Vaterfensters
  58.            WS_VISIBLE,        // Style des Frame-Fensters
  59.            (PULONG)&flCreateFrame,
  60.            szClientClass,     // Client-Fenster-Klasse
  61.            "",                // Kein expliziter Titel
  62.            0L,                // Style des Client-Fensters
  63.            NULL,              // Resourcen sind in EXE-Datei
  64.            0,                 // keine Identity f. Resourcen
  65.            (PHWND)&hwndClient // Zeiger auf den Handle des
  66.                               //    Client-Fensters
  67.            );
  68.  
  69.   /******************************************************/
  70.   /* "Message-processing-Loop":                         */
  71.   /* Empfange und verteile Messages aus der Message-    */
  72.   /* Queue der Anwendung, bis WinGetMsg FALSE           */
  73.   /* zurueckgibt: dies geschieht dann, wenn WinGetMsg   */
  74.   /* eine WM_QUIT-Message erhielt.                      */
  75.   /******************************************************/
  76.   while( WinGetMsg( hab, (PQMSG)&qmsg, (HWND)NULL, 0, 0 ) )
  77.     WinDispatchMsg( hab, (PQMSG)&qmsg );
  78.  
  79.   /***** Programmabschluss **************/
  80.   WinDestroyWindow( hwndFrame );   // Gib alle
  81.   WinDestroyMsgQueue( hmq );       // Resourcen           
  82.   WinTerminate( hab );             // zurueck
  83.  
  84.   return 0;
  85. }
  86.  
  87.  
  88. /********  Start der Window-Prozedur des Client  *****/
  89. MRESULT EXPENTRY ClientWindowProc( HWND hwnd, USHORT msg,
  90.                                    MPARAM mp1, MPARAM mp2 )
  91. {
  92.   HPS    hps;          // Presentation-Space-Handle
  93.   RECTL  rectl;        // Struktur Rechteck-Koordinaten
  94.  
  95.   /****** DER Ausgabetext **********/
  96.   static CHAR szText[] = "toolbox, das Fenster zum Durchblicken";
  97.  
  98.   switch( msg )
  99.   {
  100.     case WM_CREATE:
  101.       /* Hier koennte eine Einleitung stehen  */
  102.       return 0;
  103.  
  104.     case WM_PAINT:
  105.       /***********************************************/
  106.       /* hier wird der Inhalt des Clients gezeichnet */
  107.       /***********************************************/
  108.       // Erzeuge einen Presentation Space
  109.       hps = WinBeginPaint( hwnd, NULL, NULL );
  110.  
  111.       // Ausmasse des Client-Window ermittlen
  112.       WinQueryWindowRect( hwnd, &rectl);
  113.  
  114.       WinDrawText( hps, -1,
  115.                    szText, &rectl,
  116.                    CLR_NEUTRAL, CLR_BACKGROUND,
  117.                    DT_CENTER | DT_VCENTER | DT_ERASERECT );
  118.  
  119.       WinEndPaint( hps );
  120.       return 0;
  121.  
  122.     case WM_DESTROY:
  123.       /* Hier koennte ein Abschiedsmeldung hin  */
  124.       return 0;
  125.  
  126.     default:
  127.       /***********************************************/
  128.       /* Hierher gelangen alle anderen Events, die   */
  129.       /* von der Window-Prozedur des Client-Bereiches*/
  130.       /* nicht explizit behandelt werden.            */
  131.       /* Dieser Fall muß(!) behandelt werden!        */
  132.       /***********************************************/
  133.  
  134.       return WinDefWindowProc( hwnd, msg, mp1, mp2 );
  135.   }
  136.   return FALSE;
  137. }
  138.