Annotation of mstools/samples/gdidemo/xform.c, revision 1.1.1.2

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.