|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.