Annotation of mstools/samples/gridfont/view.cxx, revision 1.1

1.1     ! root        1: //--------------------------------------------------------------------
        !             2: // File: View.Cxx
        !             3: //
        !             4: // Classes: 
        !             5: //      CClientCanvas - Device context for client area
        !             6: //      CPrintCanvas  - Device context for printing
        !             7: //
        !             8: //      CView          - Base class for Views 
        !             9: //      CScrollaleView - Scrollable View
        !            10: //      CFullPageView  - NonScrollable FullPage View
        !            11: //
        !            12: // History: 22-Jan-1993 Asmusf  Created
        !            13: //
        !            14: // Copyright (c) 1993 Microsoft Corp. All Rights reserved
        !            15: //
        !            16: //--------------------------------------------------------------------
        !            17: #include <windows.h>
        !            18: #include <windowsx.h>
        !            19: #include <commdlg.h>
        !            20: #include "app.h"
        !            21: #include "view.hxx"
        !            22: #include "grid.hxx"
        !            23: 
        !            24: //+--------------------------------------------------------
        !            25: // Class:       CView
        !            26: //
        !            27: // Purpose:     Standard fixed View for printing, or base class
        !            28: //
        !            29: // History:     22-Jan-1993     asmusf  created
        !            30: //----------------------------------------------------------
        !            31: CView::CView(int cx, int cy)
        !            32: {
        !            33:         _iScale = 100;        // percentage magnification
        !            34:         _ptOrg.x = 0;         // 0..(PAGEWIDTH - widht of window) 
        !            35:         _ptOrg.y = 0;         // 0..(PAGEHEIGHT - height of window)
        !            36:         _ptScroll.x = 0;      // 0..PAGEWIDTH
        !            37:         _ptScroll.y = 0;      // 0..PAGEHEIGHT
        !            38:         _size.cx = cx;        // width of window (dev. coord)
        !            39:         _size.cy = cy;        // widht of window (dev. coord)
        !            40: }
        !            41: 
        !            42: void CView::SetSize( int cx, int cy)
        !            43: {
        !            44:         _size.cx = cx;
        !            45:         _size.cy = cy;
        !            46: }
        !            47: 
        !            48: void CView::Invalidate(HWND hwnd, LPRECT lpRect)
        !            49: {
        !            50:         InvalidateRect(hwnd, lpRect, TRUE);             
        !            51: }
        !            52: 
        !            53: BOOL CView::Paint(CCanvas& canvas, CModel * _pModel, RECT rc)
        !            54: {
        !            55:         // Scale using MapMode = logical TWIPS
        !            56:         canvas.Scale(_iScale);
        !            57:         
        !            58:         // Client rect in logical coordinates
        !            59:         _ptClient.x=_size.cx;
        !            60:         _ptClient.y=_size.cy;
        !            61:         canvas.DPtoLP(&_ptClient);
        !            62: 
        !            63:         // Adjust GDIwindow origin, set _ptOrg
        !            64:         Scroll(canvas);
        !            65: 
        !            66:         // ClipRectangle in logical coordinates
        !            67:         POINT pt;
        !            68:         pt.x = rc.left; pt.y = rc.top;
        !            69:         canvas.DPtoLP(&pt);
        !            70:         rc.left = pt.x; rc.top = pt.y;
        !            71: 
        !            72:         pt.x = rc.right; pt.y = rc.bottom;
        !            73:         canvas.DPtoLP(&pt);
        !            74:         rc.right = pt.x; rc.bottom = pt.y;
        !            75: 
        !            76: 
        !            77:         // Paint
        !            78:         _pModel->Paint(canvas, rc);
        !            79: 
        !            80:         return TRUE;  // screen Paints don't fail
        !            81: }
        !            82: 
        !            83: UINT CView::Hittest(CCanvas& canvas, POINT ptTest, CModel * _pModel)
        !            84: {
        !            85:         // Scale using MapMode = logical TWIPS
        !            86:         canvas.Scale(_iScale);
        !            87:         
        !            88:         // Client rect in logical coordinates
        !            89:         _ptClient.x=_size.cx;
        !            90:         _ptClient.y=_size.cy;
        !            91:         canvas.DPtoLP(&_ptClient);
        !            92: 
        !            93:         // Adjust GDIwindow origin, set _ptOrg
        !            94:         Scroll(canvas);
        !            95: 
        !            96:         // Hittest
        !            97: 
        !            98:         canvas.DPtoLP(&ptTest);
        !            99:         return _pModel->Hittest( ptTest);
        !           100: }
        !           101: 
        !           102: void CView::Scroll(CCanvas &canvas)
        !           103: {
        !           104:         int dx=MulDiv(_ptClient.x,_ptScroll.x,PAGEWIDTH);
        !           105:         int dy=MulDiv(_ptClient.y,_ptScroll.y,PAGEHEIGHT);
        !           106: 
        !           107:         // Adjust GDIwindow origin, set _ptOrg
        !           108:         _ptOrg.x = _ptScroll.x-dx;
        !           109:         _ptOrg.y = _ptScroll.y-dy;
        !           110:         
        !           111:         canvas.Scroll(_ptOrg.x, _ptOrg.y);
        !           112: }
        !           113: 
        !           114: //+--------------------------------------------------------
        !           115: // Class:       CScrollableView
        !           116: //
        !           117: // Purpose:     View for scrollable window
        !           118: //
        !           119: // History:     22-Jan-1993     asmusf  created
        !           120: //----------------------------------------------------------
        !           121: void CScrollableView::SetHScrollPos(HWND hwnd, WPARAM wParam, LPARAM lParam, CModel * pModel)
        !           122: {
        !           123:     CScreenCanvas canvas(hwnd);
        !           124:     int nScrollPos = GetScrollPos( hwnd, SB_HORZ );
        !           125:     canvas.Scale(_iScale);
        !           126: 
        !           127: 
        !           128:     SIZE size;
        !           129:     pModel->GetLineSize(&size);
        !           130: 
        !           131:     // scroll position relative to page dimension
        !           132:     switch (wParam)
        !           133:     {
        !           134:     case SB_LINEUP:
        !           135:          nScrollPos -= 2 * size.cx;
        !           136:          break;
        !           137:     case SB_LINEDOWN:
        !           138:          nScrollPos += 2 * size.cx;
        !           139:          break;
        !           140: 
        !           141:     case SB_PAGEUP:
        !           142:          nScrollPos -= _ptClient.x; // size of Window in log coord
        !           143:          break;
        !           144: 
        !           145:     case SB_PAGEDOWN:
        !           146:          nScrollPos += _ptClient.x;
        !           147:          break;
        !           148: 
        !           149:     case SB_THUMBPOSITION:
        !           150:          nScrollPos = LOWORD(lParam);
        !           151:          break;
        !           152: 
        !           153:     default:
        !           154:          break;
        !           155:     }
        !           156:                       
        !           157:     nScrollPos = max( 0, min (nScrollPos, PAGEWIDTH));
        !           158:     
        !           159:     POINT pt;
        !           160:     pt.x =  GetScrollPos( hwnd, SB_HORZ ) - nScrollPos;
        !           161:     if( pt.x )
        !           162:     {
        !           163:         SetScrollPos(hwnd, SB_HORZ, nScrollPos, TRUE );
        !           164: 
        !           165:         pt.y = 0;
        !           166:         canvas.LPtoDP(&pt);
        !           167: 
        !           168:         pt.x -= MulDiv( _ptClient.x, pt.x, PAGEWIDTH);
        !           169:         ScrollWindow(hwnd, pt.x, pt.y, NULL, NULL );    
        !           170:     }
        !           171:     _ptScroll.x = nScrollPos;
        !           172: }
        !           173: 
        !           174: void CScrollableView::SetVScrollPos(HWND hwnd, WPARAM wParam, LPARAM lParam, CModel * pModel)
        !           175: {
        !           176:     CScreenCanvas canvas(hwnd);
        !           177:     int nScrollPos = GetScrollPos( hwnd, SB_VERT );
        !           178:     canvas.Scale(_iScale);
        !           179: 
        !           180: 
        !           181:     SIZE size;
        !           182:     pModel->GetLineSize(&size);
        !           183: 
        !           184:     // scroll position relative to page dimension
        !           185:     switch (wParam)
        !           186:     {
        !           187:     case SB_LINEUP:
        !           188:          nScrollPos -= 2 * size.cy;
        !           189:          break;
        !           190:     case SB_LINEDOWN:
        !           191:          nScrollPos += 2 * size.cy;
        !           192:          break;
        !           193: 
        !           194:     case SB_PAGEUP:
        !           195:          nScrollPos -= _ptClient.y; // size of Window in log coord
        !           196:          break;
        !           197: 
        !           198:     case SB_PAGEDOWN:
        !           199:          nScrollPos += _ptClient.y;
        !           200:          break;
        !           201: 
        !           202:     case SB_THUMBPOSITION:
        !           203:          nScrollPos = LOWORD(lParam);
        !           204:          break;
        !           205: 
        !           206:     default:
        !           207:          break;
        !           208:     }
        !           209:                       
        !           210:     nScrollPos = max( 0, min (nScrollPos, PAGEHEIGHT));
        !           211:     
        !           212:     POINT pt;
        !           213:     pt.y =  GetScrollPos( hwnd, SB_VERT ) - nScrollPos;
        !           214:     if( pt.y )
        !           215:     {
        !           216:         SetScrollPos(hwnd, SB_VERT, nScrollPos, TRUE );
        !           217: 
        !           218:         pt.x = 0;
        !           219:         canvas.LPtoDP(&pt);
        !           220: 
        !           221:         pt.y -= MulDiv( _ptClient.y, pt.y, PAGEHEIGHT);
        !           222:         ScrollWindow(hwnd, pt.x, pt.y, NULL, NULL );    
        !           223:     }
        !           224:     _ptScroll.y = nScrollPos;
        !           225: }
        !           226: 
        !           227: //+--------------------------------------------------------
        !           228: // Class:       CPrintCanvas
        !           229: //
        !           230: // Purpose:     Device Context for Printing
        !           231: //
        !           232: // History:     22-Jan-1993     asmusf  created
        !           233: //----------------------------------------------------------
        !           234: 
        !           235: // fully inline //
        !           236: 
        !           237: //+--------------------------------------------------------
        !           238: // Class:       CPrintRequest
        !           239: //
        !           240: // Purpose:     Print Job selection and parameters
        !           241: //
        !           242: // History:     22-Jan-1993     asmusf  created
        !           243: //----------------------------------------------------------
        !           244: CPrintAux PrGlobal;     // global flags for printing control
        !           245: 
        !           246: CPrintRequest::CPrintRequest(HWND hwnd, UINT nMinPage, UINT nMaxPage ) :
        !           247:         _hwnd(hwnd),
        !           248:         _hdc(0),
        !           249:         _hDevNames(0)
        !           250: {
        !           251:     PRINTDLG pd;
        !           252: 
        !           253:     pd.lStructSize= sizeof(PRINTDLG);
        !           254:     pd.hwndOwner=NULL;
        !           255:     pd.hDevMode=NULL;
        !           256:     pd.hDevNames=NULL;
        !           257:     pd.hDC;
        !           258:     pd.nFromPage = 0xFFFF; // cause initial blank field
        !           259:     pd.nToPage   = 0xFFFF; // in dialog
        !           260:     pd.nMinPage=nMinPage;
        !           261:     pd.nMaxPage=nMaxPage;
        !           262:     pd.nCopies=1;
        !           263:     pd.hInstance=NULL;
        !           264:     pd.lCustData=0L;
        !           265:     pd.lpfnPrintHook=NULL;
        !           266:     pd.lpfnSetupHook=NULL;
        !           267:     pd.lpPrintTemplateName=NULL;
        !           268:     pd.lpSetupTemplateName=NULL;
        !           269:     pd.hPrintTemplate=NULL;
        !           270:     pd.hSetupTemplate=NULL;
        !           271: 
        !           272:     pd.Flags = PD_RETURNDEFAULT;
        !           273:     
        !           274:     if( PrintDlg(&pd) )
        !           275:     {
        !           276:         pd.Flags = PD_SELECTION | PD_HIDEPRINTTOFILE | PD_RETURNDC;
        !           277:         if( PrintDlg( &pd ) )
        !           278:         {
        !           279:              if(pd.Flags & PD_PAGENUMS)
        !           280:              {
        !           281:                  _nFromPage = pd.nFromPage;
        !           282:                  _nToPage = pd.nToPage;
        !           283:              }
        !           284:              else if (pd.Flags & PD_ALLPAGES )
        !           285:              {
        !           286:                  _nFromPage = nMinPage;
        !           287:                  _nToPage = nMaxPage;
        !           288:              }
        !           289:              else   // Selection
        !           290:              {
        !           291:                  _nFromPage = _nToPage = 0xFFFF;
        !           292:              }
        !           293:              _hdc = pd.hDC;
        !           294:              _hDevNames = pd.hDevNames;
        !           295: 
        !           296:              if( pd.hDevMode )
        !           297:              {
        !           298:                 GlobalFree (pd.hDevMode);
        !           299:              }
        !           300:              _status = PREQ_SUCCESS;
        !           301:              return;
        !           302:         }
        !           303:         else
        !           304:         {
        !           305:             _status = PREQ_ERROR;
        !           306:             return;
        !           307:         }
        !           308:     } 
        !           309: 
        !           310:     _status = PREQ_CANCEL;
        !           311: }
        !           312: 
        !           313: CPrintRequest:: ~CPrintRequest()
        !           314: {
        !           315:     if( _hDevNames )
        !           316:     {
        !           317:         GlobalFree( _hDevNames );
        !           318:     }
        !           319:     
        !           320:     if( _hdc )
        !           321:     {
        !           322:         DeleteDC(_hdc );
        !           323:     }
        !           324: }
        !           325: 
        !           326: UINT CPrintRequest::Print(HINSTANCE hInst, CCanvas &canvas, CModel *pModel)
        !           327: {
        !           328:      // needs to become app & font name....
        !           329:      static TCHAR szMessage [] = TEXT("Grid: Printing") ;
        !           330: 
        !           331:      TCHAR szCaption[30];
        !           332:      
        !           333:      BOOL       fError = PREQ_SUCCESS ;
        !           334:      ABORTPROC  lpfnAbortProc;
        !           335:      DLGPROC    lpfnPrintDlgProc ;
        !           336:      short      cxPage, cyPage ;
        !           337: 
        !           338:      cxPage = GetDeviceCaps (canvas, HORZRES) ;
        !           339:      cyPage = GetDeviceCaps (canvas, VERTRES) ;
        !           340: 
        !           341:      // disable user input to main window
        !           342:      EnableWindow (_hwnd, FALSE) ;
        !           343: 
        !           344:      lpfnPrintDlgProc = (DLGPROC) MakeProcInstance ((FARPROC) PrintDlgProc, hInst) ;
        !           345:      
        !           346:      LoadString(hInst, IDS_MSGCAPTION, szCaption, 30);
        !           347:      PrGlobal._bUserAbort = FALSE ;
        !           348:      PrGlobal._hDlgPrint = 
        !           349:                 CreateDialogParam (hInst, TEXT("PrintDlgBox"), _hwnd, 
        !           350:                                 lpfnPrintDlgProc, (LONG)(LPSTR) szCaption) ;
        !           351: 
        !           352:      lpfnAbortProc = (ABORTPROC) MakeProcInstance ((FARPROC) AbortProc, hInst) ;
        !           353: 
        !           354:      SetAbortProc(canvas, lpfnAbortProc);
        !           355: 
        !           356:      DOCINFO docinfo;
        !           357:      docinfo.cbSize = sizeof(DOCINFO);
        !           358:      docinfo.lpszDocName = szMessage;
        !           359:      docinfo.lpszOutput = NULL;
        !           360: 
        !           361:      if (Escape (canvas, STARTDOC, sizeof szMessage - 1, (LPCSTR)szMessage, NULL) > 0)
        !           362:      //if (StartDoc(canvas, &docinfo) > 0)
        !           363:      {
        !           364:           UINT fuFormat;
        !           365:           pModel->GetFormat(fuFormat);
        !           366:           pModel->SetFormat(fuFormat | PAGEPRINT|PAGEELEMS);
        !           367:           UINT iSavePage = pModel->GetPage();
        !           368:           
        !           369: 
        !           370:           // create printer view to 
        !           371:           CView  View(cxPage, cyPage);
        !           372: 
        !           373: 
        !           374:           if( _nToPage == 0xFFFF || _nFromPage == 0xFFFF )
        !           375:           {     
        !           376:                 _nToPage =   pModel->GetPage()+1;
        !           377:                 _nFromPage = pModel->GetPage()+1;
        !           378:           }
        !           379: 
        !           380:           for( ; _nFromPage <= _nToPage && ! fError ; _nFromPage++ )
        !           381:           {
        !           382:                 if( StartPage(canvas) < 0 )
        !           383:                 {
        !           384:                     fError = PREQ_ERRSTARTPAGE ;
        !           385:                     break;
        !           386:                 }    
        !           387:                 pModel->SetPage(_nFromPage-1);  // <- pages are 0 based in Model
        !           388:                 RECT rc;
        !           389:                 rc.left = rc.top = 0;
        !           390:                 rc.right= cxPage;
        !           391:                 rc.bottom = cyPage;
        !           392:                 View.Paint (canvas, pModel, rc) ;
        !           393:                 
        !           394:                 if ( EndPage(canvas) < 0)
        !           395:                 {
        !           396:                     fError = PREQ_ERRENDPAGE ;
        !           397:                 }
        !           398:           }
        !           399:           if( !fError )
        !           400:           {
        !           401:                EndDoc(canvas);
        !           402:           }
        !           403:           // restore screen format
        !           404:           pModel->SetPage(iSavePage);
        !           405:           pModel->SetFormat(fuFormat);
        !           406:      }
        !           407:      else
        !           408:      {
        !           409:           fError = PREQ_ERRSTARTDOC ;
        !           410:      }
        !           411: 
        !           412:      if (!PrGlobal._bUserAbort)
        !           413:      {
        !           414:           EnableWindow (_hwnd, TRUE) ;
        !           415:           DestroyWindow (PrGlobal._hDlgPrint) ;
        !           416:      }
        !           417: 
        !           418:      FreeProcInstance ((FARPROC)lpfnPrintDlgProc) ;
        !           419:      FreeProcInstance ((FARPROC)lpfnAbortProc) ;
        !           420: 
        !           421:      if( PrGlobal._bUserAbort )
        !           422:      {
        !           423:         fError |= PREQ_USERABORT;
        !           424:      }
        !           425: 
        !           426:      return fError ;
        !           427: }
        !           428: 
        !           429: 
        !           430: 

unix.superglobalmegacorp.com

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