home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk11 / petzold / chap03 / welcome3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-20  |  6.3 KB  |  159 lines

  1. /*-----------------------------------------------------------
  2.    WELCOME3.C -- Creates a Top-Level Window and Two Children
  3.   -----------------------------------------------------------*/
  4.  
  5. #define INCL_WIN
  6. #include <os2.h>
  7.  
  8. MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  9. MRESULT EXPENTRY ChildWndProc  (HWND, USHORT, MPARAM, MPARAM) ;
  10.  
  11. int main (void)
  12.      {
  13.      static CHAR  szClientClass [] = "Welcome3",
  14.                   szChildClass  [] = "Welcome3.Child" ;
  15.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
  16.                                  FCF_SIZEBORDER    | FCF_MINMAX   |
  17.                                  FCF_SHELLPOSITION | FCF_TASKLIST ;
  18.      HAB          hab ;
  19.      HMQ          hmq ;
  20.      HWND         hwndFrame,  hwndChildFrame1,  hwndChildFrame2,
  21.                   hwndClient, hwndChildClient1, hwndChildClient2 ;
  22.      QMSG         qmsg ;
  23.  
  24.      hab = WinInitialize (0) ;
  25.      hmq = WinCreateMsgQueue (hab, 0) ;
  26.  
  27.      WinRegisterClass (
  28.                     hab,                // Anchor block handle
  29.                     szClientClass,      // Name of class being registered
  30.                     ClientWndProc,      // Window procedure for class
  31.                     CS_SIZEREDRAW,      // Class style
  32.                     0) ;                // Extra bytes to reserve
  33.  
  34.      WinRegisterClass (
  35.                     hab,                // Anchor block handle
  36.                     szChildClass,       // Name of class being registered
  37.                     ChildWndProc,       // Window procedure for class
  38.                     CS_SIZEREDRAW,      // Class style
  39.                     sizeof (PVOID)) ;   // Extra bytes to reserve
  40.  
  41.           /*-------------------------
  42.              Create top-level window
  43.             -------------------------*/
  44.  
  45.      hwndFrame = WinCreateStdWindow (
  46.                     HWND_DESKTOP,       // Parent window handle
  47.                     WS_VISIBLE,         // Style of frame window
  48.                     &flFrameFlags,      // Pointer to control data
  49.                     szClientClass,      // Client window class name
  50.                     NULL,               // Title bar text
  51.                     0L,                 // Style of client window
  52.                     NULL,               // Module handle for resources
  53.                     0,                  // ID of resources
  54.                     &hwndClient) ;      // Pointer to client window handle
  55.  
  56.      WinSendMsg (hwndFrame, WM_SETICON,
  57.                       WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  58.                       NULL) ;
  59.  
  60.           /*--------------------------
  61.              Create two child windows
  62.             --------------------------*/
  63.  
  64.      flFrameFlags &= ~FCF_TASKLIST ;
  65.  
  66.      hwndChildFrame1 = WinCreateStdWindow (
  67.                     hwndClient,         // Parent window handle
  68.                     WS_VISIBLE,         // Style of frame window
  69.                     &flFrameFlags,      // Pointer to control data
  70.                     szChildClass,       // Client window class name
  71.                     "Child No. 1",      // Title bar text
  72.                     0L,                 // Style of client window
  73.                     NULL,               // Module handle for resources
  74.                     0,                  // ID of resources
  75.                     &hwndChildClient1) ;// Pointer to client window handle
  76.  
  77.      hwndChildFrame2 = WinCreateStdWindow (
  78.                     hwndClient,         // Parent window handle
  79.                     WS_VISIBLE,         // Style of frame window
  80.                     &flFrameFlags,      // Pointer to control data
  81.                     szChildClass,       // Client window class name
  82.                     "Child No. 2",      // Title bar text
  83.                     0L,                 // Style of client window
  84.                     NULL,               // Module handle for resources
  85.                     0,                  // ID of resources
  86.                     &hwndChildClient2) ;// Pointer to client window handle
  87.  
  88.      WinSendMsg (hwndChildFrame1, WM_SETICON,
  89.                       WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  90.                       NULL) ;
  91.  
  92.      WinSendMsg (hwndChildFrame2, WM_SETICON,
  93.                       WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  94.                       NULL) ;
  95.  
  96.           /*-----------------------------------------------------
  97.              Set reserved area of window to text string pointers
  98.             -----------------------------------------------------*/
  99.  
  100.      WinSetWindowPtr (hwndChildClient1, QWL_USER, "I'm a child ...") ;
  101.      WinSetWindowPtr (hwndChildClient2, QWL_USER, "... Me too!") ;      
  102.  
  103.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  104.           WinDispatchMsg (hab, &qmsg) ;
  105.  
  106.      WinDestroyWindow (hwndFrame) ;
  107.      WinDestroyMsgQueue (hmq) ;
  108.      WinTerminate (hab) ;
  109.      return 0 ;
  110.      }
  111.  
  112. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  113.      {
  114.      static CHAR szText [] = "I'm the parent of two children" ;
  115.      HPS         hps ;
  116.      RECTL       rcl ;
  117.  
  118.      switch (msg)
  119.           {
  120.           case WM_PAINT:
  121.                hps = WinBeginPaint (hwnd, NULL, NULL) ;
  122.  
  123.                WinQueryWindowRect (hwnd, &rcl) ;
  124.  
  125.                WinDrawText (hps, -1, szText, &rcl, CLR_NEUTRAL, CLR_BACKGROUND,
  126.                             DT_CENTER | DT_VCENTER | DT_ERASERECT) ;
  127.  
  128.                WinEndPaint (hps) ;
  129.                return 0 ;
  130.           }
  131.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  132.      }
  133.  
  134. MRESULT EXPENTRY ChildWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  135.      {
  136.      HPS   hps ;
  137.      RECTL rcl ;
  138.  
  139.      switch (msg)
  140.           {
  141.           case WM_PAINT:
  142.                hps = WinBeginPaint (hwnd, NULL, NULL) ;
  143.  
  144.                WinQueryWindowRect (hwnd, &rcl) ;
  145.  
  146.                WinDrawText (hps, -1, WinQueryWindowPtr (hwnd, QWL_USER), &rcl,
  147.                             CLR_NEUTRAL, CLR_BACKGROUND,
  148.                             DT_CENTER | DT_VCENTER | DT_ERASERECT) ;
  149.  
  150.                WinEndPaint (hps) ;
  151.                return 0 ;
  152.  
  153.           case WM_CLOSE:
  154.                WinDestroyWindow (WinQueryWindow (hwnd, QW_PARENT, FALSE)) ;
  155.                return 0 ;
  156.           }
  157.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  158.      }
  159.