Annotation of pmsdk/samples/petzold/chap14/pattdlg.c, revision 1.1.1.1

1.1       root        1: /*--------------------------------------------------
                      2:    PATTDLG.C -- Select GPI Patterns from Dialog Box
                      3:   --------------------------------------------------*/
                      4: 
                      5: #define INCL_WIN
                      6: #define INCL_GPI
                      7: #include <os2.h>
                      8: #include "pattdlg.h"
                      9: 
                     10: typedef struct
                     11:      {
                     12:      SHORT sPattern ;
                     13:      SHORT sColor ;
                     14:      BOOL  fBorder ;
                     15:      }
                     16:      PATTERNSDATA ;
                     17: 
                     18: typedef PATTERNSDATA FAR *PPATTERNSDATA ;
                     19: 
                     20: MRESULT EXPENTRY ClientWndProc  (HWND, USHORT, MPARAM, MPARAM) ;
                     21: MRESULT EXPENTRY AboutDlgProc   (HWND, USHORT, MPARAM, MPARAM) ;
                     22: MRESULT EXPENTRY PatternDlgProc (HWND, USHORT, MPARAM, MPARAM) ;
                     23: 
                     24: HAB  hab ;
                     25: 
                     26: int main (void)
                     27:      {
                     28:      static CHAR  szClientClass[] = "PattDlg" ;
                     29:      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
                     30:                                  FCF_SIZEBORDER    | FCF_MINMAX   |
                     31:                                  FCF_SHELLPOSITION | FCF_TASKLIST |
                     32:                                  FCF_MENU ;
                     33:      HMQ          hmq ;
                     34:      HWND         hwndFrame, hwndClient ;
                     35:      QMSG         qmsg ;
                     36: 
                     37:      hab = WinInitialize (0) ;
                     38:      hmq = WinCreateMsgQueue (hab, 0) ;
                     39: 
                     40:      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
                     41: 
                     42:      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
                     43:                                      &flFrameFlags, szClientClass, NULL,
                     44:                                     0L, NULL, ID_RESOURCE, &hwndClient) ;
                     45: 
                     46:      WinSendMsg (hwndFrame, WM_SETICON,
                     47:                  WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
                     48:                  NULL) ;
                     49: 
                     50:      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
                     51:           WinDispatchMsg (hab, &qmsg) ;
                     52: 
                     53:      WinDestroyWindow (hwndFrame) ;
                     54:      WinDestroyMsgQueue (hmq) ;
                     55:      WinTerminate (hab) ;
                     56:      return 0 ;
                     57:      }
                     58: 
                     59: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
                     60:      {
                     61:      static CHAR         szAppName [] = "PATTDLG" ;
                     62:      static CHAR         szKeyName [] = "SETTINGS" ;
                     63:      static PATTERNSDATA pdCurrent = { IDD_DENSE1, IDD_BKGRND, TRUE } ;
                     64:      static SHORT        cxClient, cyClient ;
                     65:      HPS                 hps ;
                     66:      POINTL              ptl ;
                     67:      SHORT               sDataLength ;
                     68: 
                     69:      switch (msg)
                     70:           {
                     71:           case WM_CREATE:
                     72:                sDataLength = sizeof pdCurrent ;
                     73: 
                     74:                WinQueryProfileData (hab, szAppName, szKeyName, &pdCurrent,
                     75:                                     &sDataLength) ;
                     76:                return 0 ;
                     77: 
                     78:           case WM_SIZE:
                     79:                cxClient = SHORT1FROMMP (mp2) ;
                     80:                cyClient = SHORT2FROMMP (mp2) ;
                     81:                return 0 ;
                     82: 
                     83:           case WM_COMMAND:
                     84:                switch (COMMANDMSG(&msg)->cmd)
                     85:                     {
                     86:                     case IDM_PATTERNS:
                     87:                          if (WinDlgBox (HWND_DESKTOP, hwnd, PatternDlgProc,
                     88:                                         NULL, IDD_PATTERNS, &pdCurrent))
                     89: 
                     90:                               WinInvalidateRect (hwnd, NULL, FALSE) ;
                     91:                          return 0 ;
                     92: 
                     93:                     case IDM_ABOUT:
                     94:                          WinDlgBox (HWND_DESKTOP, hwnd, AboutDlgProc,
                     95:                                     NULL, IDD_ABOUT, NULL) ;
                     96:                          return 0 ;
                     97:                     }
                     98:                break ;
                     99: 
                    100:           case WM_PAINT:
                    101:                hps = WinBeginPaint (hwnd, NULL, NULL) ;
                    102:                GpiErase (hps) ;
                    103: 
                    104:                GpiSetColor (hps, pdCurrent.sColor -
                    105:                                  IDD_BKGRND + CLR_BACKGROUND) ;
                    106: 
                    107:                GpiSetPattern (hps, pdCurrent.sPattern -
                    108:                                    IDD_DENSE1 + PATSYM_DENSE1) ;
                    109: 
                    110:                ptl.x = cxClient / 4 ;
                    111:                ptl.y = cyClient / 4 ;
                    112:                GpiMove (hps, &ptl) ;
                    113: 
                    114:                ptl.x *= 3 ;
                    115:                ptl.y *= 3 ;
                    116:                GpiBox (hps, pdCurrent.fBorder ? DRO_OUTLINEFILL : DRO_FILL,
                    117:                             &ptl, 0L, 0L) ;
                    118: 
                    119:                WinEndPaint (hps) ;
                    120:                return 0 ;
                    121: 
                    122:           case WM_DESTROY:
                    123:                if (MBID_YES == WinMessageBox (HWND_DESKTOP, hwnd,
                    124:                                     "Save current settings?", szAppName, 0,
                    125:                                     MB_YESNO | MB_ICONQUESTION))
                    126: 
                    127:                     WinWriteProfileData (hab, szAppName, szKeyName, &pdCurrent,
                    128:                                          sizeof pdCurrent) ;
                    129:                break ;
                    130:           }
                    131:      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
                    132:      }
                    133: 
                    134: MRESULT EXPENTRY AboutDlgProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
                    135:      {
                    136:      switch (msg)
                    137:           {
                    138:           case WM_COMMAND:
                    139:                switch (COMMANDMSG(&msg)->cmd)
                    140:                     {
                    141:                     case DID_OK:
                    142:                     case DID_CANCEL:
                    143:                          WinDismissDlg (hwnd, TRUE) ;
                    144:                          return 0 ;
                    145:                     }
                    146:                break ;
                    147:           }
                    148:      return WinDefDlgProc (hwnd, msg, mp1, mp2) ;
                    149:      }
                    150: 
                    151: MRESULT EXPENTRY PatternDlgProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
                    152:      {
                    153:      static PATTERNSDATA  pdLocal ;
                    154:      static PPATTERNSDATA ppdCurrent ;
                    155: 
                    156:      switch (msg)
                    157:           {
                    158:           case WM_INITDLG:
                    159:                ppdCurrent = MPFROMP (mp2) ;
                    160:                pdLocal = *ppdCurrent ;
                    161: 
                    162:                WinSendDlgItemMsg (hwnd, pdLocal.sPattern, BM_SETCHECK,
                    163:                                   MPFROM2SHORT (TRUE, 0), NULL) ;
                    164: 
                    165:                WinSendDlgItemMsg (hwnd, pdLocal.sColor, BM_SETCHECK,
                    166:                                   MPFROM2SHORT (TRUE, 0), NULL) ;
                    167: 
                    168:                WinSendDlgItemMsg (hwnd, IDD_BORDER, BM_SETCHECK,
                    169:                                   MPFROM2SHORT (pdLocal.fBorder, 0), NULL) ;
                    170: 
                    171:                WinSetFocus (HWND_DESKTOP,
                    172:                             WinWindowFromID (hwnd, pdLocal.sPattern)) ;
                    173:                return 1 ;
                    174: 
                    175:           case WM_CONTROL:
                    176:                if (SHORT1FROMMP (mp1) >= IDD_DENSE1 &&
                    177:                    SHORT1FROMMP (mp1) <= IDD_HALFTONE)
                    178:                     {
                    179:                     WinSendDlgItemMsg (hwnd, pdLocal.sPattern, BM_SETCHECK,
                    180:                                        MPFROM2SHORT (FALSE, 0), NULL) ;
                    181: 
                    182:                     pdLocal.sPattern = SHORT1FROMMP (mp1) ;
                    183: 
                    184:                     WinSendDlgItemMsg (hwnd, pdLocal.sPattern, BM_SETCHECK,
                    185:                                        MPFROM2SHORT (TRUE, 0), NULL) ;
                    186:                     }
                    187: 
                    188:                else if (SHORT1FROMMP (mp1) >= IDD_BKGRND &&
                    189:                         SHORT1FROMMP (mp1) <= IDD_PALEGRAY)
                    190:                     {
                    191:                     WinSendDlgItemMsg (hwnd, pdLocal.sColor, BM_SETCHECK,
                    192:                                        MPFROM2SHORT (FALSE, 0), NULL) ;
                    193: 
                    194:                     pdLocal.sColor = SHORT1FROMMP (mp1) ;
                    195: 
                    196:                     WinSendDlgItemMsg (hwnd, pdLocal.sColor, BM_SETCHECK,
                    197:                                              MPFROM2SHORT (TRUE, 0), NULL) ; 
                    198:                     }
                    199:                return 0 ;
                    200: 
                    201:           case WM_COMMAND:
                    202:                switch (COMMANDMSG(&msg)->cmd)
                    203:                     {
                    204:                     case DID_OK:
                    205:                          pdLocal.fBorder = (BOOL) WinSendDlgItemMsg (hwnd,
                    206:                                    IDD_BORDER, BM_QUERYCHECK, NULL, NULL) ;
                    207: 
                    208:                          *ppdCurrent = pdLocal ;
                    209: 
                    210:                          WinDismissDlg (hwnd, TRUE) ;
                    211:                          return 0 ;
                    212: 
                    213:                     case DID_CANCEL:
                    214:                          WinDismissDlg (hwnd, FALSE) ;
                    215:                          return 0 ;
                    216:                     }
                    217:                break ;
                    218:           }
                    219:      return WinDefDlgProc (hwnd, msg, mp1, mp2) ;
                    220:      }

unix.superglobalmegacorp.com

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