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

1.1     ! root        1: //+--------------------------------------------------------
        !             2: // File:        App.cxx
        !             3: //
        !             4: // Classes:     CController
        !             5: //
        !             6: // Functions:   WinMain
        !             7: //              WndProc
        !             8: //              MakeWindowClass
        !             9: //              AboutDlgProc
        !            10: //
        !            11: // History:     22-Jan-1993     asmusf  created
        !            12: //----------------------------------------------------------
        !            13: 
        !            14: #include <windows.h>
        !            15: #include <windowsx.h>
        !            16: #include "app.hxx"
        !            17: //+--------------------------------------------------------
        !            18: // Class:       CController
        !            19: //
        !            20: // Purpose:     Controlling the application, UI handler
        !            21: //
        !            22: // History:     22-Jan-1993     asmusf  created
        !            23: //----------------------------------------------------------
        !            24: 
        !            25: void CController::Create(HWND hwnd, LONG lParam )
        !            26: {
        !            27:     HANDLE handle = ((LPCREATESTRUCT) lParam)->hInstance;
        !            28:     _hInst = (HINSTANCE)handle;
        !            29:     _funAbout = (DLGPROC) MakeProcInstance((FARPROC)AboutDlgProc, _hInst);
        !            30: 
        !            31:     // Set up the Main View
        !            32:     _pView = new CScrollableView(((LPCREATESTRUCT) lParam)->cx,
        !            33:                                 ((LPCREATESTRUCT) lParam)->cy);
        !            34:     _pView->SetScale(100);
        !            35: 
        !            36:     SetScrollRange(hwnd, SB_VERT, 0, PAGEHEIGHT, FALSE);
        !            37:     SetScrollRange(hwnd, SB_HORZ, 0, PAGEWIDTH, FALSE);
        !            38: 
        !            39:     SetScrollPos(hwnd, SB_HORZ, 0, TRUE );
        !            40:     SetScrollPos(hwnd, SB_VERT, 0, TRUE );
        !            41: 
        !            42:     // Set up the Model
        !            43:     _pModel= new CModel(_hInst, HEXADECIMAL);
        !            44: 
        !            45:     // Set up the initial state of the Menu
        !            46:     Page(hwnd, IDM_FIRSTPAGE);
        !            47: 
        !            48:     // initially no pop-up character box
        !            49:     _pBox = 0;
        !            50: }
        !            51: 
        !            52: void CController::Destroy()
        !            53: {
        !            54: 
        !            55:     FreeProcInstance((FARPROC)AboutDlgProc);
        !            56: 
        !            57:     delete _pView;
        !            58:     delete _pModel;
        !            59:     PostQuitMessage(0);
        !            60: }
        !            61: 
        !            62: void CController::Size ( LONG lParam )
        !            63: {
        !            64:    _pView->SetSize ( LOWORD(lParam), HIWORD(lParam) );
        !            65: }
        !            66: 
        !            67: // Message Box with text from resource file
        !            68: void CController::AlertBox( HWND hwnd, UINT idsText, UINT fuStyle)
        !            69: {
        !            70:     TCHAR szText[100];
        !            71:     TCHAR szCaption[100];
        !            72: 
        !            73:     LoadString(_hInst, idsText, (LPTSTR)szText, 100);
        !            74:     LoadString(_hInst, IDS_MSGCAPTION, (LPTSTR)szCaption, 100);
        !            75: 
        !            76:     ::MessageBox (hwnd, (LPTSTR)szText, (LPTSTR)szCaption, fuStyle) ;
        !            77: };
        !            78: 
        !            79: // Menu commands processing
        !            80: 
        !            81: void CController::Command ( HWND hwnd, WPARAM wID )
        !            82: {
        !            83:     switch ( wID )
        !            84:     {
        !            85:       // File Menu
        !            86:       case IDM_PRINT:
        !            87:            {
        !            88:                 CPrintRequest job(hwnd, 1, _pModel->GetMaxPage());
        !            89: 
        !            90:                 if(!job.Cancelled())
        !            91:                 {
        !            92:                     CPrintCanvas canvas (job);
        !            93:                     job.Print (_hInst, canvas, _pModel);
        !            94:                     
        !            95:                     if(job.Error())
        !            96:                     {
        !            97:                         AlertBox (hwnd, IDS_PRINTERR, MB_OK | MB_ICONEXCLAMATION) ;
        !            98:                     }
        !            99:                 }
        !           100:            }
        !           101:            break;
        !           102:       case IDM_EXIT:
        !           103:            SendMessage ( hwnd, WM_CLOSE, 0L, 0L );
        !           104:            break;
        !           105: 
        !           106:       // View Menu
        !           107:       case IDM_NEXTPAGE:
        !           108:            Page(hwnd, IDM_NEXTPAGE);
        !           109:            break;
        !           110:       case IDM_PREVPAGE:
        !           111:            Page(hwnd, IDM_PREVPAGE);
        !           112:            break;
        !           113:       case IDM_NEXTSECTION:
        !           114:            Page(hwnd, IDM_NEXTSECTION);
        !           115:            break;
        !           116:       case IDM_PREVSECTION:
        !           117:            Page(hwnd, IDM_PREVSECTION);
        !           118:            break;
        !           119:       case IDM_ZOOMIN:
        !           120:            {
        !           121:                UINT iScale;
        !           122:                _pView->GetScale(iScale);
        !           123:                iScale -= (iScale > 50 ? 25 : 0);
        !           124:                _pView->SetScale(iScale);
        !           125:                _pView->Invalidate(hwnd);
        !           126:            }
        !           127:            break;
        !           128:       case IDM_ZOOMOUT:
        !           129:            {
        !           130:                UINT iScale;
        !           131:                _pView->GetScale(iScale);
        !           132:                iScale += (iScale < 200 ? 25 : 0);
        !           133:                _pView->SetScale(iScale);
        !           134:                _pView->Invalidate(hwnd);
        !           135:            }
        !           136:            break;
        !           137: 
        !           138:       // Options Menu
        !           139:       case IDM_FONT:
        !           140:            _pModel->ChooseFont(hwnd);
        !           141:            _pView->Invalidate(hwnd);
        !           142:            break;
        !           143:       case IDM_DECIMAL:
        !           144:            {
        !           145:                UINT fuFormat;
        !           146:                _pModel->GetFormat(fuFormat);
        !           147:                fuFormat ^= DECIMAL;
        !           148:                CheckMenuItem (GetMenu(hwnd), IDM_DECIMAL, 
        !           149:                         fuFormat & DECIMAL ? MF_CHECKED : MF_UNCHECKED ) ;
        !           150:               _pModel->SetFormat(fuFormat);
        !           151:            }
        !           152:            _pView->Invalidate(hwnd);
        !           153:            break;
        !           154: 
        !           155:       // Help Menu
        !           156:       case IDM_HELP:
        !           157:            AlertBox ( hwnd, IDS_NOTIMPLEM, MB_ICONINFORMATION | MB_OK);
        !           158:            break;
        !           159:       case IDM_ABOUT:
        !           160:            DialogBox ( _hInst, TEXT("AboutBox"), hwnd, _funAbout );
        !           161:            break;
        !           162:      }
        !           163: }
        !           164: 
        !           165: void CController::Page(HWND hwnd, WPARAM wParam)
        !           166: {
        !           167:     UINT iPage = _pModel->GetPage();
        !           168:     switch (wParam)
        !           169:     {
        !           170:     case IDM_PREVPAGE: 
        !           171:         _pModel->PrevPage();
        !           172:         break;  
        !           173:     case IDM_NEXTPAGE:
        !           174:         _pModel->NextPage();
        !           175:         break;  
        !           176:     case IDM_NEXTSECTION:
        !           177:         _pModel->NextSection();
        !           178:         break;
        !           179:     case IDM_PREVSECTION:
        !           180:         _pModel->PrevSection();
        !           181:         break;
        !           182:     case IDM_FIRSTPAGE:
        !           183:         _pModel->SetPage( 0 );
        !           184:         break;  
        !           185:     case IDM_LASTPAGE:
        !           186:         _pModel->SetPage( _pModel->GetMaxPage() -1 );
        !           187:         break;  
        !           188:     }
        !           189:     if (iPage != _pModel->GetPage())
        !           190:     {   
        !           191:         _pView->Invalidate(hwnd);
        !           192:     }
        !           193:     HMENU hmenu = GetMenu(hwnd);
        !           194: 
        !           195:     EnableMenuItem (hmenu, IDM_PREVPAGE, _pModel->CanPrevPage()  ?
        !           196:                       MF_ENABLED : MF_DISABLED | MF_GRAYED ) ;
        !           197:     EnableMenuItem (hmenu, IDM_NEXTPAGE, _pModel->CanNextPage() ?
        !           198:                       MF_ENABLED : MF_DISABLED | MF_GRAYED ) ;
        !           199:     EnableMenuItem (hmenu, IDM_NEXTSECTION, _pModel->CanNextSection() ?
        !           200:                       MF_ENABLED : MF_DISABLED | MF_GRAYED ) ;
        !           201:     EnableMenuItem (hmenu, IDM_PREVSECTION,_pModel->CanPrevSection() ?
        !           202:                       MF_ENABLED : MF_DISABLED | MF_GRAYED ) ;
        !           203: }
        !           204: 
        !           205: void CController::ButtonDown(HWND hwnd, LONG lParam )
        !           206: {
        !           207:     static RECT rc;
        !           208:     SetCapture (hwnd);
        !           209: 
        !           210:     if( _pBox )
        !           211:     {
        !           212:         delete _pBox;
        !           213:         _pBox = 0;
        !           214:         _pView->Invalidate(hwnd, &rc);
        !           215:         return;
        !           216:     }
        !           217:     
        !           218:     SIZE size = { 4*(INCH1-INCH8)/5, INCH1 /*-INCH8*/ };
        !           219:     CBoxFormat bxf(size);
        !           220: 
        !           221:     CScreenCanvas canvas(hwnd);
        !           222:     
        !           223:     POINT pt = {LOWORD(lParam), HIWORD(lParam)};
        !           224: 
        !           225:     UINT iChar = _pView->Hittest(canvas, pt, _pModel);
        !           226:     
        !           227:     if( iChar == 0xFFFF )
        !           228:     {
        !           229:         return;
        !           230:     }
        !           231:     HFONT hfont = _pModel->GetFont();
        !           232:     _pBox = new CBox(bxf, iChar, hfont); 
        !           233: 
        !           234:     canvas.DPtoLP(&pt);
        !           235:     pt.x -= size.cx/2;
        !           236:     pt.y -= size.cy/2;
        !           237: #ifdef UNICODE
        !           238:     pt.x -= size.cx; // accommodate wider popup
        !           239: #endif
        !           240: 
        !           241:     GetClientRect(hwnd, &rc);
        !           242: 
        !           243:     _pBox->Paint(canvas, pt, rc);
        !           244:     size = _pBox->GetSize();
        !           245:     
        !           246:     canvas.LPtoDP(&pt);
        !           247:     rc.left = pt.x;
        !           248:     rc.top = pt.y;
        !           249:     
        !           250:     canvas.DPtoLP(&pt);
        !           251:     pt.x+=size.cx;
        !           252:     pt.y+=size.cy;
        !           253: 
        !           254:     canvas.LPtoDP(&pt);
        !           255:     rc.right = pt.x;
        !           256:     rc.bottom = pt.y;
        !           257: }
        !           258: 
        !           259: void CController::ButtonUp(HWND hwnd, LONG lParam )
        !           260: {
        !           261:     ReleaseCapture();
        !           262: }
        !           263: 
        !           264: void CController::KeyDown(HWND hwnd, WPARAM wParam, LPARAM lParam)
        !           265: {
        !           266:     switch( wParam )
        !           267:     {
        !           268:     case VK_PRIOR:
        !           269:          Page(hwnd, IDM_PREVPAGE);
        !           270:          break;
        !           271:     case VK_NEXT:
        !           272:          Page(hwnd, IDM_NEXTPAGE);
        !           273:          break;
        !           274:     case VK_HOME:
        !           275:          Page(hwnd, IDM_FIRSTPAGE);
        !           276:          break;
        !           277:     case VK_END:
        !           278:          Page(hwnd, IDM_LASTPAGE);
        !           279:          break;
        !           280:     case VK_UP:
        !           281:          _pView->SetVScrollPos(hwnd, SB_LINEUP, lParam, _pModel);       
        !           282:          break;
        !           283:     case VK_DOWN:
        !           284:          _pView->SetVScrollPos(hwnd, SB_LINEDOWN, lParam, _pModel);     
        !           285:          break;
        !           286:     case VK_LEFT:
        !           287:          _pView->SetHScrollPos(hwnd, SB_LINEUP, lParam, _pModel);       
        !           288:          break;
        !           289:     case VK_RIGHT:
        !           290:          _pView->SetHScrollPos(hwnd, SB_LINEDOWN, lParam, _pModel);     
        !           291:          break;
        !           292:     }
        !           293: }
        !           294: 
        !           295: void CController::KeyUp(HWND hwnd, WPARAM wParam, LPARAM lParam)
        !           296: {
        !           297: }
        !           298: 
        !           299: void CController::HScroll(HWND hwnd, WPARAM wParam, LPARAM lParam)
        !           300: {
        !           301:     _pView->SetHScrollPos(hwnd, wParam, lParam, _pModel);       
        !           302: }
        !           303: 
        !           304: void CController::VScroll(HWND hwnd, WPARAM wParam, LPARAM lParam)
        !           305: {
        !           306:     _pView->SetVScrollPos(hwnd, wParam, lParam, _pModel);       
        !           307: }
        !           308: 
        !           309: // Main application
        !           310: 
        !           311: // NOTE: for October Beta needed to declare WinMain with HANDLE instead
        !           312: //       of HINSTANCE, which requires the two casts further down
        !           313: //       (compiler internally faults otherwise)
        !           314: 
        !           315: 
        !           316: // WinMain - Main window funtion
        !           317: //
        !           318: int PASCAL WinMain
        !           319:    ( HANDLE hInst, HANDLE hPrevInst, LPSTR cmdParam, int cmdShow )
        !           320: {
        !           321:     TCHAR  szAppName [] = TEXT("Grid") ;
        !           322:     TCHAR  szCaption [] = TEXT("Character Grid") ;
        !           323: 
        !           324:     // Create Window Class
        !           325:  
        !           326:     if ( hPrevInst == 0 )
        !           327:     {
        !           328:         MakeWindowClass ( WndProc, szAppName, (HINSTANCE) hInst );
        !           329:     }
        !           330: 
        !           331:     // Create Window
        !           332:     
        !           333:     CWindow win ( szCaption, szAppName, (HINSTANCE) hInst );
        !           334:     
        !           335:     win.Show ( cmdShow );
        !           336:     
        !           337:     MSG  msg;
        !           338:     
        !           339:     while ( GetMessage (&msg, NULL, 0, 0 ) )
        !           340:     {
        !           341:         TranslateMessage ( &msg );
        !           342:         DispatchMessage ( &msg );
        !           343:     }
        !           344:     
        !           345:     return msg.wParam;
        !           346: }
        !           347: 
        !           348: // Make Window Class
        !           349: //
        !           350: void MakeWindowClass ( WNDPROC WndProc, LPTSTR szAppName, HINSTANCE hInst )
        !           351: {
        !           352:     WNDCLASS cl;
        !           353:    
        !           354:     cl.style = CS_HREDRAW | CS_VREDRAW;
        !           355:     cl.lpfnWndProc = WndProc;
        !           356:     cl.cbClsExtra = 0;
        !           357:     cl.cbWndExtra = 0;
        !           358:     cl.hInstance = hInst;
        !           359:     cl.hIcon = LoadIcon ( hInst, szAppName );
        !           360:     cl.hCursor = LoadCursor ( NULL, IDC_ARROW );
        !           361:     cl.hbrBackground = GetStockBrush ( WHITE_BRUSH );
        !           362:     cl.lpszMenuName = szAppName;
        !           363:     cl.lpszClassName = szAppName;
        !           364:    
        !           365:     RegisterClass (&cl);
        !           366: }
        !           367: 
        !           368: // Window Proc
        !           369: //
        !           370: 
        !           371: LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
        !           372: {
        !           373:     static CController ctrl;
        !           374: 
        !           375:     switch (message)
        !           376:     {
        !           377:         case WM_CREATE:
        !           378:             ctrl.Create(hwnd, lParam);
        !           379:             return 0;
        !           380:         case WM_SIZE:
        !           381:             ctrl.Size(lParam);
        !           382:             return 0;
        !           383:         case WM_PAINT:
        !           384:             ctrl.Paint(hwnd);
        !           385:             return 0;
        !           386:         case WM_COMMAND:
        !           387:             ctrl.Command(hwnd, wParam);
        !           388:             return 0;
        !           389:         case WM_LBUTTONUP:
        !           390:             ctrl.ButtonUp(hwnd, lParam);
        !           391:             return 0;
        !           392:         case WM_LBUTTONDOWN:
        !           393:             ctrl.ButtonDown(hwnd, lParam);
        !           394:             return 0;
        !           395:         case WM_KEYUP:
        !           396:             ctrl.KeyUp(hwnd, wParam, lParam);
        !           397:             return 0;
        !           398:         case WM_KEYDOWN:
        !           399:             ctrl.KeyDown(hwnd, wParam, lParam);
        !           400:             return 0;
        !           401:         case WM_VSCROLL:
        !           402:             ctrl.VScroll(hwnd, wParam, lParam );
        !           403:             return 0;
        !           404:         case WM_HSCROLL:
        !           405:             ctrl.HScroll(hwnd, wParam, lParam );
        !           406:             return 0;
        !           407:         case WM_DESTROY:
        !           408:             ctrl.Destroy();
        !           409:             return 0;
        !           410: 
        !           411:     }
        !           412:     return DefWindowProc (hwnd, message, wParam, lParam );
        !           413: }
        !           414: 
        !           415: // "About" dialog box procedure
        !           416: // Process messages from dialog box
        !           417: //
        !           418: 
        !           419: BOOL CALLBACK AboutDlgProc
        !           420:    ( HWND hwnd, UINT message, WPARAM wParam, LONG lParam )
        !           421: {
        !           422: 
        !           423:     switch(message)
        !           424:     {
        !           425:        case WM_INITDIALOG:
        !           426:             return TRUE;
        !           427:        case WM_COMMAND:
        !           428:             switch (wParam) //Command ID
        !           429:             {
        !           430:                case IDOK:
        !           431:                case IDCANCEL:
        !           432:                     EndDialog(hwnd, 0);
        !           433:                     return TRUE;
        !           434:             }
        !           435:             break;
        !           436:     }
        !           437:     return FALSE;
        !           438: }
        !           439: 
        !           440: extern CPrintAux PrGlobal;
        !           441: 
        !           442: //======== PrintDlgProc ===========================================
        !           443: 
        !           444: BOOL CALLBACK PrintDlgProc
        !           445:    ( HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam )
        !           446: {
        !           447:     switch (message)
        !           448:     {
        !           449:         case WM_INITDIALOG:
        !           450:              SetWindowText (hwndDlg, (TCHAR *)lParam) ;
        !           451:              EnableMenuItem (GetSystemMenu (hwndDlg, FALSE), SC_CLOSE, MF_GRAYED) ;
        !           452:              return TRUE ;
        !           453: 
        !           454:         case WM_COMMAND:
        !           455:              PrGlobal._bUserAbort = TRUE ;
        !           456:              EnableWindow (GetParent (hwndDlg), TRUE) ;
        !           457:              DestroyWindow (hwndDlg) ;
        !           458:              PrGlobal._hDlgPrint = 0 ;
        !           459:              return TRUE ;
        !           460:     }
        !           461:     return FALSE ;
        !           462: }
        !           463: 
        !           464: //======== AbortProc ===========================================
        !           465: 
        !           466: BOOL CALLBACK AbortProc(HDC hdcPrn, short nCode)
        !           467: {
        !           468:     MSG   msg ;
        !           469: 
        !           470:     while (!PrGlobal._bUserAbort && PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
        !           471:     {
        !           472:         if (!PrGlobal._hDlgPrint 
        !           473:                 || 
        !           474:             !IsDialogMessage (PrGlobal._hDlgPrint, &msg))
        !           475:         {
        !           476:             TranslateMessage (&msg) ;
        !           477:             DispatchMessage (&msg) ;
        !           478:         }
        !           479:     }
        !           480:     return !PrGlobal._bUserAbort ;
        !           481: }
        !           482: 
        !           483: 

unix.superglobalmegacorp.com

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