|
|
1.1 root 1: /*--------------------------------------
2: WEB.C -- Mouse Movement Demo Program
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 [] = "Web" ;
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,
27: CS_SIZEREDRAW | CS_SYNCPAINT, 0) ;
28:
29: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, flFrameStyle,
30: &flFrameFlags, szClientClass,
31: "Mouse Movement Demo",
32: 0L, NULL, 0, &hwndClient) ;
33:
34: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
35: WinDispatchMsg (hab, &qmsg) ;
36:
37: WinDestroyWindow (hwndFrame) ;
38: WinDestroyMsgQueue (hmq) ;
39: WinTerminate (hab) ;
40:
41: return 0 ;
42: }
43:
44: VOID DrawWeb (HPS hps, POINTL *pptlPointerPos, POINTL *pptlClient)
45: {
46: POINTL ptl ;
47:
48: /*--------------------------------------
49: Lower Left to Pointer to Upper Right
50: --------------------------------------*/
51:
52: ptl.x = 0 ;
53: ptl.y = 0 ;
54: GpiMove (hps, &ptl) ;
55: GpiLine (hps, pptlPointerPos) ;
56: GpiLine (hps, pptlClient) ;
57:
58: /*--------------------------------------
59: Upper Left to Pointer to Lower Right
60: --------------------------------------*/
61:
62: ptl.x = 0 ;
63: ptl.y = pptlClient->y ;
64:
65: GpiMove (hps, &ptl) ;
66: GpiLine (hps, pptlPointerPos) ;
67:
68: ptl.x = pptlClient->x ;
69: ptl.y = 0 ;
70:
71: GpiLine (hps, &ptl) ;
72:
73: /*-----------------------------------------
74: Lower Middle to Pointer to Upper Middle
75: -----------------------------------------*/
76:
77: ptl.x = pptlClient->x / 2 ;
78: ptl.y = 0 ;
79:
80: GpiMove (hps, &ptl) ;
81: GpiLine (hps, pptlPointerPos) ;
82:
83: ptl.y = pptlClient->y ;
84:
85: GpiLine (hps, &ptl) ;
86:
87: /*----------------------------------------
88: Middle Left to Pointer to Middle Right
89: ----------------------------------------*/
90:
91: ptl.x = 0 ;
92: ptl.y = pptlClient->y / 2 ;
93:
94: GpiMove (hps, &ptl) ;
95: GpiLine (hps, pptlPointerPos) ;
96:
97: ptl.x = pptlClient->x ;
98:
99: GpiLine (hps, &ptl) ;
100: }
101:
102: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
103: {
104: static POINTL ptlClient, ptlPointerPos ;
105: HPS hps ;
106:
107: switch (msg)
108: {
109: case WM_SIZE:
110: ptlClient.x = SHORT1FROMMP (mp2) ;
111: ptlClient.y = SHORT2FROMMP (mp2) ;
112: return 0 ;
113:
114: case WM_MOUSEMOVE:
115: hps = WinGetPS (hwnd) ;
116:
117: GpiSetMix (hps, FM_INVERT) ;
118: DrawWeb (hps, &ptlPointerPos, &ptlClient) ;
119:
120: ptlPointerPos.x = MOUSEMSG(&msg)->x ;
121: ptlPointerPos.y = MOUSEMSG(&msg)->y ;
122:
123: DrawWeb (hps, &ptlPointerPos, &ptlClient) ;
124:
125: WinReleasePS (hps) ;
126: return 1 ;
127:
128: case WM_PAINT:
129: hps = WinBeginPaint (hwnd, NULL, NULL) ;
130: GpiErase (hps) ;
131:
132: GpiSetMix (hps, FM_INVERT) ;
133: DrawWeb (hps, &ptlPointerPos, &ptlClient) ;
134:
135: WinEndPaint (hps) ;
136: return 0 ;
137: }
138: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.