|
|
1.1 ! root 1: /*--------------------------------- ! 2: PATTERNS.C -- GPI Area Patterns ! 3: ---------------------------------*/ ! 4: ! 5: #define INCL_WIN ! 6: #define INCL_GPI ! 7: #include <os2.h> ! 8: #include <string.h> ! 9: ! 10: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ; ! 11: ! 12: int main (void) ! 13: { ! 14: static CHAR szClientClass [] = "Patterns" ; ! 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, hwndClient ; ! 21: QMSG qmsg ; ! 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, WS_VISIBLE, ! 29: &flFrameFlags, szClientClass, NULL, ! 30: 0L, NULL, 0, &hwndClient) ; ! 31: ! 32: WinSendMsg (hwndFrame, WM_SETICON, ! 33: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE), ! 34: NULL) ; ! 35: ! 36: while (WinGetMsg (hab, &qmsg, NULL, 0, 0)) ! 37: WinDispatchMsg (hab, &qmsg) ; ! 38: ! 39: WinDestroyWindow (hwndFrame) ; ! 40: WinDestroyMsgQueue (hmq) ; ! 41: WinTerminate (hab) ; ! 42: return 0 ; ! 43: } ! 44: ! 45: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) ! 46: { ! 47: static struct { ! 48: LONG lPatternSymbol ; ! 49: CHAR *szPatternSymbol ; ! 50: } ! 51: show [] = ! 52: { ! 53: PATSYM_DEFAULT , "PATSYM_DEFAULT" , ! 54: PATSYM_DENSE1 , "PATSYM_DENSE1" , ! 55: PATSYM_DENSE2 , "PATSYM_DENSE2" , ! 56: PATSYM_DENSE3 , "PATSYM_DENSE3" , ! 57: PATSYM_DENSE4 , "PATSYM_DENSE4" , ! 58: PATSYM_DENSE5 , "PATSYM_DENSE5" , ! 59: PATSYM_DENSE6 , "PATSYM_DENSE6" , ! 60: PATSYM_DENSE7 , "PATSYM_DENSE7" , ! 61: PATSYM_DENSE8 , "PATSYM_DENSE8" , ! 62: PATSYM_VERT , "PATSYM_VERT" , ! 63: PATSYM_HORIZ , "PATSYM_HORIZ" , ! 64: PATSYM_DIAG1 , "PATSYM_DIAG1" , ! 65: PATSYM_DIAG2 , "PATSYM_DIAG2" , ! 66: PATSYM_DIAG3 , "PATSYM_DIAG3" , ! 67: PATSYM_DIAG4 , "PATSYM_DIAG4" , ! 68: PATSYM_NOSHADE , "PATSYM_NOSHADE" , ! 69: PATSYM_SOLID , "PATSYM_SOLID" , ! 70: PATSYM_HALFTONE , "PATSYM_HALFTONE" , ! 71: PATSYM_BLANK , "PATSYM_BLANK" , ! 72: } ; ! 73: static SHORT cxClient, cyClient, cxCaps, cyChar, cyDesc, ! 74: sNumTypes = sizeof show / sizeof show[0] ; ! 75: FONTMETRICS fm ; ! 76: HPS hps ; ! 77: POINTL ptl ; ! 78: SHORT sIndex ; ! 79: ! 80: switch (msg) ! 81: { ! 82: case WM_CREATE: ! 83: hps = WinGetPS (hwnd) ; ! 84: GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ; ! 85: cxCaps = (SHORT) fm.lEmInc ; ! 86: cyChar = (SHORT) fm.lMaxBaselineExt ; ! 87: cyDesc = (SHORT) fm.lMaxDescender ; ! 88: WinReleasePS (hps) ; ! 89: return 0 ; ! 90: ! 91: case WM_SIZE: ! 92: cxClient = SHORT1FROMMP (mp2) ; ! 93: cyClient = SHORT2FROMMP (mp2) ; ! 94: return 0 ; ! 95: ! 96: case WM_PAINT: ! 97: hps = WinBeginPaint (hwnd, NULL, NULL) ; ! 98: GpiErase (hps) ; ! 99: ! 100: for (sIndex = 0 ; sIndex < sNumTypes ; sIndex ++) ! 101: { ! 102: GpiSetPattern (hps, show [sIndex].lPatternSymbol) ; ! 103: ! 104: ptl.x = (sIndex < 10 ? 1 : 33) * cxCaps ; ! 105: ptl.y = cyClient - (sIndex % 10 * 5 + 4) * cyChar / 2 ! 106: + cyDesc ; ! 107: ! 108: GpiCharStringAt (hps, &ptl, ! 109: (LONG) strlen (show [sIndex].szPatternSymbol), ! 110: show [sIndex].szPatternSymbol) ; ! 111: ! 112: ptl.x = (sIndex < 10 ? 20 : 52) * cxCaps ; ! 113: ptl.y -= cyDesc + cyChar / 2 ; ! 114: GpiMove (hps, &ptl) ; ! 115: ! 116: ptl.x += 10 * cxCaps ; ! 117: ptl.y += 2 * cyChar ; ! 118: GpiBox (hps, DRO_FILL, &ptl, 0L, 0L) ; ! 119: } ! 120: WinEndPaint (hps) ; ! 121: return 0 ; ! 122: } ! 123: return WinDefWindowProc (hwnd, msg, mp1, mp2) ; ! 124: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.