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

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

unix.superglobalmegacorp.com

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