|
|
1.1 root 1: /*-------------------------------------------------------------------------*\
2: | XFORM MODULE
3: |
4: | segment: _TEXT (DOS16)
5: | created: 31-Oct-90
6: | history: 31-Oct-90 <chriswil> created.
7: |
8: \*---------------------------------------------------------------------------*/
9:
10: #include <windows.h>
11: #include "gdidemo.h"
12: #include "xform.h"
13:
14: VOID ResetXForm(HWND);
15: VOID DrawXForm(HWND);
16:
17:
18: /*---------------------------------------------------------------------------*\
19: | CREATE XFORM WINDOW PROCEDURE
20: |
21: | created: 31-Oct-90
22: | history: 31-Oct-90 <chriswil> created.
23: |
24: \*---------------------------------------------------------------------------*/
25: HWND FAR CreateXFormWindow(HWND hWndClient, int nItem)
26: {
27: HANDLE hInstance;
28: MDICREATESTRUCT mcs;
29:
30:
31: hInstance = GETINSTANCE(hWndClient);
32:
33: /*
34: ** Initialize the MDI create struct for creation of the
35: ** test window.
36: */
37: mcs.szClass = XFORMCLASS;
38: mcs.szTitle = XFORMTITLE;
39: mcs.hOwner = hInstance;
40: mcs.x = CW_USEDEFAULT;
41: mcs.y = CW_USEDEFAULT;
42: mcs.cx = CW_USEDEFAULT;
43: mcs.cy = CW_USEDEFAULT;
44: mcs.style = 0l;
45: mcs.lParam = (LONG)nItem;
46:
47: return((HWND)SendMessage(hWndClient,WM_MDICREATE,NULL,(LONG)(LPMDICREATESTRUCT)&mcs));
48: }
49:
50:
51: /*---------------------------------------------------------------------------*\
52: | XFORM WINDOW PROCEDURE
53: |
54: | created: 31-Oct-90
55: | history: 31-Oct-90 <chriswil> created.
56: |
57: \*---------------------------------------------------------------------------*/
58: LONG APIENTRY XFormProc(HWND hWnd, UINT wMsg, WPARAM wParam, LONG lParam)
59: {
60: switch(wMsg)
61: {
62: case WM_CREATE:
63: XFormCreateProc(hWnd);
64: break;
65:
66:
67: case WM_MOVE:
68: ResetXForm(hWnd);
69: break;
70:
71:
72: case WM_TIMER:
73: DrawXForm(hWnd);
74: break;
75:
76:
77: case WM_COMMAND:
78: XFormCommandProc(hWnd,wParam,lParam);
79: break;
80:
81:
82: case WM_PAINT:
83: XFormPaintProc(hWnd);
84: break;
85:
86:
87: case WM_DESTROY:
88: XFormDestroyProc(hWnd);
89: break;
90:
91:
92: default:
93: return(DefMDIChildProc(hWnd,wMsg,wParam,lParam));
94: }
95: return(0l);
96: }
97:
98:
99: /*---------------------------------------------------------------------------*\
100: | XFORM CREATE PROCEDURE
101: |
102: | created: 31-Oct-90
103: | history: 31-Oct-90 <chriswil> created.
104: |
105: \*---------------------------------------------------------------------------*/
106: BOOL XFormCreateProc(HWND hWnd)
107: {
108: PXFORMDATA pxd;
109:
110: #ifndef NOT_IMPLEMENTED
111:
112: RECT rect;
113: int dx,dy;
114:
115: #endif
116:
117: if(AllocWindowInfo(hWnd,sizeof(XFORMDATA)))
118: {
119: if(pxd = (PXFORMDATA)LockWindowInfo(hWnd))
120: {
121:
122: #ifndef NOT_IMPLEMENTED
123:
124: GetClientRect(hWnd,&rect);
125:
126: dx = (rect.right + rect.left) >> 4;
127: dy = (rect.bottom + rect.top) >> 4;
128:
129: pxd->pObject[0].x = dx << 1;
130: pxd->pObject[0].y = 0;
131: pxd->pObject[1].x = dx;
132: pxd->pObject[1].y = dy;
133: pxd->pObject[2].x = 0;
134: pxd->pObject[2].y = dy;
135: pxd->pObject[3].x = dx << 1;
136: pxd->pObject[3].y = 0;
137: pxd->nObject = 4;
138:
139: pxd->xForm.eM11 = (float) 0.866;
140: pxd->xForm.eM12 = (float) 0.5;
141: pxd->xForm.eM21 = (float)-0.5;
142: pxd->xForm.eM22 = (float) 0.866;
143: pxd->xForm.eDx = (float) 0;
144: pxd->xForm.eDy = (float) 0;
145:
146: #endif
147:
148: UnlockWindowInfo(hWnd);
149:
150: SetTimer(hWnd,1,500,NULL);
151:
152: return(TRUE);
153: }
154: FreeWindowInfo(hWnd);
155: }
156: return(FALSE);
157: }
158:
159:
160: /*---------------------------------------------------------------------------*\
161: | XFORM COMMAND PROCEDURE
162: |
163: | created: 31-Oct-90
164: | history: 31-Oct-90 <chriswil> created.
165: |
166: \*---------------------------------------------------------------------------*/
167: BOOL XFormCommandProc(HWND hWnd, WPARAM wParam, LONG lParam)
168: {
169: hWnd = hWnd;
170: wParam = wParam;
171: lParam = lParam;
172:
173: return(TRUE);
174: }
175:
176:
177: /*---------------------------------------------------------------------------*\
178: | XFORM PAINT PROCEDURE
179: |
180: | created: 31-Oct-90
181: | history: 31-Oct-90 <chriswil> created.
182: |
183: \*---------------------------------------------------------------------------*/
184: VOID XFormPaintProc(HWND hWnd)
185: {
186: HDC hDC;
187: PAINTSTRUCT ps;
188:
189:
190: if(hDC = BeginPaint(hWnd,&ps))
191: EndPaint(hWnd,&ps);
192:
193: ResetXForm(hWnd);
194:
195: return;
196: }
197:
198:
199: /*---------------------------------------------------------------------------*\
200: | XFORM DESTROY PROCEDURE
201: |
202: | created: 31-Oct-90
203: | history: 31-Oct-90 <chriswil> created.
204: |
205: \*---------------------------------------------------------------------------*/
206: VOID XFormDestroyProc(HWND hWnd)
207: {
208: KillTimer(hWnd,1);
209: FreeWindowInfo(hWnd);
210: return;
211: }
212:
213:
214:
215: VOID ResetXForm(HWND hWnd)
216: {
217: PXFORMDATA pxd;
218: HDC hDC;
219:
220: #ifndef NOT_IMPLEMENTED
221:
222: RECT rect;
223:
224: #endif
225:
226:
227: if(pxd = (PXFORMDATA)LockWindowInfo(hWnd))
228: {
229: if(hDC = GetDC(hWnd))
230: {
231:
232: #ifndef NOT_IMPLEMENTED
233:
234: GetClientRect(hWnd,&rect);
235: BitBlt(hDC,0,0,rect.right,rect.bottom,(HDC)0,0,0,0);
236:
237: SetViewportOrgEx(hDC,rect.right >> 1,rect.bottom >> 1,NULL);
238: SetWorldTransform(hDC,(LPXFORM)&pxd->xForm);
239: Polyline(hDC,pxd->pObject,pxd->nObject);
240: ModifyWorldTransform(hDC,(LPXFORM)&pxd->xForm,MWT_IDENTITY);
241:
242:
243: // I have to put this in since GDI currently doesn't
244: // reset the drawing attributes -- 5/24/91
245: //
246: SetViewportOrgEx(hDC,0,0,NULL);
247:
248: #endif
249:
250: ReleaseDC(hWnd,hDC);
251: }
252: UnlockWindowInfo(hWnd);
253: }
254: return;
255: }
256:
257:
258: VOID DrawXForm(HWND hWnd)
259: {
260: PXFORMDATA pxd;
261: HDC hDC;
262: #ifndef NOT_IMPLEMENTED
263: XFORM xForm;
264: RECT rect;
265: #endif
266:
267:
268: if(pxd = (PXFORMDATA)LockWindowInfo(hWnd))
269: {
270: if(hDC = GetDC(hWnd))
271: {
272:
273: #ifndef NOT_IMPLEMENTED
274:
275: GetClientRect(hWnd,&rect);
276: SetViewportOrgEx(hDC,rect.right >> 1, rect.bottom >> 1,NULL);
277:
278:
279: SetWorldTransform(hDC,(LPXFORM)&pxd->xForm);
280: Polyline(hDC,pxd->pObject,pxd->nObject);
281:
282: ModifyWorldTransform(hDC,(LPXFORM)&pxd->xForm,MWT_RIGHTMULTIPLY);
283: Polyline(hDC,pxd->pObject,pxd->nObject);
284:
285: GetWorldTransform(hDC,(LPXFORM)&xForm);
286: pxd->xForm.eM11 = xForm.eM11;
287: pxd->xForm.eM12 = xForm.eM12;
288: pxd->xForm.eM21 = xForm.eM21;
289: pxd->xForm.eM22 = xForm.eM22;
290: pxd->xForm.eDx = xForm.eDx;
291: pxd->xForm.eDy = xForm.eDy;
292:
293: ModifyWorldTransform(hDC,(LPXFORM)&pxd->xForm,MWT_IDENTITY);
294:
295:
296: // I have to put this in since GDI currently doesn't
297: // reset the drawing attributes -- 5/24/91
298: //
299: SetViewportOrgEx(hDC,0,0,NULL);
300:
301: #endif
302: ReleaseDC(hWnd,hDC);
303: }
304: UnlockWindowInfo(hWnd);
305: }
306: return;
307: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.