Annotation of pmsdk/samples/petzold/chap08/drawline.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.