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