|
|
1.1 ! root 1: /*------------------------------------------- ! 2: CHECKER1.C -- Mouse Hit-Test Demo Program ! 3: -------------------------------------------*/ ! 4: ! 5: #define INCL_WIN ! 6: #define INCL_GPI ! 7: ! 8: #include <os2.h> ! 9: #include <stddef.h> ! 10: ! 11: #define DIVISIONS 5 ! 12: ! 13: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ; ! 14: ! 15: int main (void) ! 16: { ! 17: static CHAR szClientClass [] = "Checker1" ; ! 18: HAB hab ; ! 19: HMQ hmq ; ! 20: HWND hwndFrame, hwndClient ; ! 21: QMSG qmsg ; ! 22: ULONG flFrameFlags = FCF_STANDARD & ~FCF_MENU ; ! 23: ULONG flFrameStyle = WS_VISIBLE ; ! 24: ! 25: hab = WinInitialize (0) ; ! 26: hmq = WinCreateMsgQueue (hab, 0) ; ! 27: ! 28: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ; ! 29: ! 30: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, flFrameStyle, ! 31: &flFrameFlags, szClientClass, ! 32: "Mouse Hit-Test Program No. 1", ! 33: 0L, NULL, 0, &hwndClient) ; ! 34: ! 35: while (WinGetMsg (hab, &qmsg, NULL, 0, 0)) ! 36: WinDispatchMsg (hab, &qmsg) ; ! 37: ! 38: WinDestroyWindow (hwndFrame) ; ! 39: WinDestroyMsgQueue (hmq) ; ! 40: WinTerminate (hab) ; ! 41: ! 42: return 0 ; ! 43: } ! 44: ! 45: VOID DrawLine (HPS hps, LONG x1, LONG y1, LONG x2, LONG y2) ! 46: { ! 47: POINTL ptl ; ! 48: ! 49: ptl.x = x1 ; ptl.y = y1 ; GpiMove (hps, &ptl) ; ! 50: ptl.x = x2 ; ptl.y = y2 ; GpiLine (hps, &ptl) ; ! 51: } ! 52: ! 53: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) ! 54: { ! 55: static BOOL bBlockState [DIVISIONS] [DIVISIONS] ; ! 56: static SHORT xBlock, yBlock ; ! 57: HPS hps ; ! 58: RECTL rcl ; ! 59: SHORT x, y ; ! 60: ! 61: switch (msg) ! 62: { ! 63: case WM_SIZE: ! 64: xBlock = SHORT1FROMMP (mp2) / DIVISIONS ; ! 65: yBlock = SHORT2FROMMP (mp2) / DIVISIONS ; ! 66: return 0 ; ! 67: ! 68: case WM_BUTTON1DOWN: ! 69: case WM_BUTTON1DBLCLK: ! 70: if (xBlock > 0 && yBlock > 0) ! 71: { ! 72: x = SHORT1FROMMP (mp1) / xBlock ; ! 73: y = SHORT2FROMMP (mp1) / yBlock ; ! 74: ! 75: if (x < DIVISIONS && y < DIVISIONS) ! 76: { ! 77: bBlockState [x][y] = !bBlockState [x][y] ; ! 78: ! 79: rcl.xRight = xBlock + (rcl.xLeft = x * xBlock) ; ! 80: rcl.yTop = yBlock + (rcl.yBottom = y * yBlock) ; ! 81: ! 82: WinInvalidateRect (hwnd, &rcl, FALSE) ; ! 83: } ! 84: else ! 85: WinAlarm (HWND_DESKTOP, WA_WARNING) ; ! 86: } ! 87: else ! 88: WinAlarm (HWND_DESKTOP, WA_WARNING) ; ! 89: ! 90: return 1 ; ! 91: ! 92: case WM_PAINT: ! 93: hps = WinBeginPaint (hwnd, NULL, NULL) ; ! 94: ! 95: GpiErase (hps) ; ! 96: ! 97: if (xBlock > 0 && yBlock > 0) ! 98: for (x = 0 ; x < DIVISIONS ; x++) ! 99: for (y = 0 ; y < DIVISIONS ; y++) ! 100: { ! 101: rcl.xRight = xBlock + (rcl.xLeft = x * xBlock); ! 102: rcl.yTop = yBlock + (rcl.yBottom = y * yBlock); ! 103: ! 104: WinDrawBorder (hps, &rcl, 1, 1, ! 105: CLR_NEUTRAL, CLR_BACKGROUND, ! 106: DB_STANDARD | DB_INTERIOR) ; ! 107: ! 108: if (bBlockState [x][y]) ! 109: { ! 110: DrawLine (hps, rcl.xLeft, rcl.yBottom, ! 111: rcl.xRight, rcl.yTop) ; ! 112: ! 113: DrawLine (hps, rcl.xLeft, rcl.yTop, ! 114: rcl.xRight, rcl.yBottom) ; ! 115: } ! 116: } ! 117: WinEndPaint (hps) ; ! 118: return 0 ; ! 119: } ! 120: return WinDefWindowProc (hwnd, msg, mp1, mp2) ; ! 121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.