|
|
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.