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

  1. /*--------------------------------------------
  2.    DRAWLINE.C -- Draw line from radio buttons
  3.   --------------------------------------------*/
  4.  
  5. #define INCL_WIN
  6. #define INCL_GPI
  7. #include <os2.h>
  8.  
  9. MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  10.  
  11. int main (void)
  12.      {
  13.      static CHAR  szClientClass[] = "DrawLine" ;
  14.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU |
  15.                                  FCF_SIZEBORDER    | FCF_MINMAX  |
  16.                                  FCF_SHELLPOSITION | FCF_TASKLIST ;
  17.      HAB          hab ;
  18.      HMQ          hmq ;
  19.      HWND         hwndFrame, hwndClient ;
  20.      QMSG         qmsg ;
  21.  
  22.      hab = WinInitialize (0) ;
  23.      hmq = WinCreateMsgQueue (hab, 0) ;
  24.  
  25.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  26.  
  27.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  28.                                      &flFrameFlags, szClientClass, NULL,
  29.                                      0L, NULL, 0, &hwndClient) ;
  30.  
  31.      WinSendMsg (hwndFrame, WM_SETICON,
  32.                  WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  33.                  NULL) ;
  34.  
  35.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  36.           WinDispatchMsg (hab, &qmsg) ;
  37.  
  38.      WinDestroyWindow (hwndFrame) ;
  39.      WinDestroyMsgQueue (hmq) ;
  40.      WinTerminate (hab) ;
  41.      return 0 ;
  42.      }
  43.  
  44. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  45.      {
  46.      static CHAR   *szGroupText[] = { "Color", "Type" } ;
  47.      static CHAR   *szColorText[] = { "Background", "Blue",      "Red",
  48.                                        "Pink",       "Green",     "Cyan",
  49.                                        "Yellow",     "Neutral",   "Dark Gray",
  50.                                        "Dark Blue",  "Dark Red",  "Dark Pink",
  51.                                        "Dark Green", "Dark Cyan", "Brown",     
  52.                                        "Pale Gray" } ;
  53.      static CHAR   *szTypeText [] = { "Dot",       "Short Dash",
  54.                                        "Dash Dot",  "Double Dot",
  55.                                        "Long Dash", "Dash Double Dot",
  56.                                        "Solid",     "Invisible" } ;
  57.      static HWND   hwndGroup[2], hwndRadioColor[8], hwndRadioType[8] ;
  58.      static POINTL aptl[5] ;
  59.      static SHORT  sCurrentColor = 7,   // Neutral
  60.                    sCurrentType  = 6 ;  // Solid
  61.      FONTMETRICS   fm ;
  62.      HPS           hps ;
  63.      SHORT         s, id, cxChar, cyChar ;
  64.  
  65.      switch (msg)
  66.           {
  67.           case WM_CREATE :
  68.                hps = WinGetPS (hwnd) ;
  69.                GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
  70.                cxChar = (SHORT) fm.lAveCharWidth ;
  71.                cyChar = (SHORT) fm.lMaxBaselineExt ;
  72.                WinReleasePS (hps) ;
  73.  
  74.                for (s = 0 ; s < 2 ; s++)
  75.  
  76.                     hwndGroup[s] = WinCreateWindow (
  77.                                         hwnd,               // Parent
  78.                                         WC_STATIC,          // Class
  79.                                         szGroupText[s],     // Text
  80.                                         WS_VISIBLE |        // Style
  81.                                              SS_GROUPBOX,
  82.                                         (8 + 42 * s) * cxChar,
  83.                                         4 * cyChar,         // Position
  84.                                         (26 + 12 * (1 - s)) *
  85.                                              cxChar,        // Width
  86.                                         14 * cyChar,        // Height
  87.                                         hwnd,               // Owner
  88.                                         HWND_TOP,           // Placement
  89.                                         s + 24,             // ID
  90.                                         NULL,               // Ctrl Data
  91.                                         NULL) ;             // Pres Params
  92.  
  93.                for (s = 0 ; s < 16 ; s++)
  94.  
  95.                     hwndRadioColor[s] = WinCreateWindow (
  96.                                         hwnd,               // Parent
  97.                                         WC_BUTTON,          // Class
  98.                                         szColorText[s],     // Text
  99.                                         WS_VISIBLE |        // Style
  100.                                              BS_RADIOBUTTON,
  101.                                         (10 + (s > 7 ? 18 : 0))
  102.                                              * cxChar,      // X Position
  103.                                         (31 - 3 * (s % 8))
  104.                                              * cyChar / 2,  // Y Position
  105.                                         16 * cxChar,        // Width
  106.                                         3 * cyChar / 2,     // Height
  107.                                         hwnd,               // Owner
  108.                                         HWND_BOTTOM,        // Placement
  109.                                         s,                  // ID
  110.                                         NULL,               // Ctrl Data
  111.                                         NULL) ;             // Pres Params
  112.  
  113.                for (s = 0 ; s < 8 ; s++)
  114.  
  115.                     hwndRadioType[s]  = WinCreateWindow (
  116.                                         hwnd,               // Parent
  117.                                         WC_BUTTON,          // Class
  118.                                         szTypeText[s],      // Text
  119.                                         WS_VISIBLE |        // Style
  120.                                              BS_RADIOBUTTON,
  121.                                         52 * cxChar,        // Position
  122.                                         (31 - 3 * s) * cyChar / 2,
  123.                                         22 * cxChar,        // Width
  124.                                         3 * cyChar / 2,     // Height
  125.                                         hwnd,               // Owner
  126.                                         HWND_BOTTOM,        // Placement
  127.                                         s + 16,             // ID
  128.                                         NULL,               // Ctrl Data
  129.                                         NULL) ;             // Pres Params
  130.                     
  131.                WinSendMsg (hwndRadioColor[sCurrentColor],
  132.                            BM_SETCHECK, MPFROMSHORT (1), NULL) ;
  133.  
  134.                WinSendMsg (hwndRadioType[sCurrentType],
  135.                            BM_SETCHECK, MPFROMSHORT (1), NULL) ;
  136.  
  137.                aptl[0].x = aptl[3].x = aptl[4].x = 4 * cxChar ;
  138.                aptl[1].x = aptl[2].x = 80 * cxChar ;
  139.  
  140.                aptl[0].y = aptl[1].y = aptl[4].y = 2 * cyChar ;
  141.                aptl[2].y = aptl[3].y = 20 * cyChar ;
  142.  
  143.                return 0 ;
  144.  
  145.           case WM_CONTROL:
  146.                id = SHORT1FROMMP (mp1) ;
  147.  
  148.                if (id < 16)             // Color IDs
  149.                     {
  150.                     WinSendMsg (hwndRadioColor[sCurrentColor],
  151.                                 BM_SETCHECK, MPFROMSHORT (0), NULL) ;
  152.  
  153.                     sCurrentColor = id ;
  154.  
  155.                     WinSendMsg (hwndRadioColor[sCurrentColor],
  156.                                 BM_SETCHECK, MPFROMSHORT (1), NULL) ;
  157.                     }
  158.  
  159.                else if (id < 24)        // Line Type IDs
  160.                     {
  161.                     WinSendMsg (hwndRadioType[sCurrentType],
  162.                                 BM_SETCHECK, MPFROMSHORT (0), NULL) ;
  163.  
  164.                     sCurrentType = id - 16 ;
  165.  
  166.                     WinSendMsg (hwndRadioType[sCurrentType],
  167.                                 BM_SETCHECK, MPFROMSHORT (1), NULL) ;
  168.                     }
  169.                WinInvalidateRect (hwnd, NULL, TRUE) ;
  170.                return 0 ;
  171.  
  172.           case WM_PAINT:
  173.                hps = WinBeginPaint (hwnd, NULL, NULL) ;
  174.                GpiErase (hps) ;
  175.  
  176.                GpiSetColor (hps, (LONG) sCurrentColor) ;
  177.                GpiSetLineType (hps, sCurrentType + LINETYPE_DOT) ;
  178.                GpiMove (hps, aptl) ;
  179.                GpiPolyLine (hps, 4L, aptl + 1) ;
  180.  
  181.                WinEndPaint (hps) ;
  182.                return 0 ;
  183.           }
  184.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  185.      }
  186.