Annotation of mstools/mfc/samples/showfont/mainwnd.cpp, revision 1.1

1.1     ! root        1: // mainwnd.cpp : Defines the behavior of the main window for ShowFont.
        !             2: //
        !             3: // This is a part of the Microsoft Foundation Classes C++ library. 
        !             4: // Copyright (C) 1992 Microsoft Corporation 
        !             5: // All rights reserved. 
        !             6: //  
        !             7: // This source code is only intended as a supplement to the 
        !             8: // Microsoft Foundation Classes Reference and Microsoft 
        !             9: // QuickHelp documentation provided with the library. 
        !            10: // See these sources for detailed information regarding the 
        !            11: // Microsoft Foundation Classes product.
        !            12: 
        !            13: #include "showfont.h"
        !            14: 
        !            15: /////////////////////////////////////////////////////////////////////////////
        !            16: 
        !            17: static UINT idPaint = 0;
        !            18: static CFont oemFont;
        !            19: static CFont ansiFixedFont;
        !            20: static CFont ansiVarFont;
        !            21: static CFont deviceFont;
        !            22: 
        !            23: // used for mutual exclusion of menus
        !            24: static UINT idPrevVAlign = IDM_ALIGNBASE;
        !            25: static UINT idPrevHAlign = IDM_ALIGNLEFT;
        !            26: static UINT idPrevFont = IDM_SYSTEM;
        !            27: 
        !            28: /////////////////////////////////////////////////////////////////////////////
        !            29: // Initialization and cleanup
        !            30: 
        !            31: CMainWindow::CMainWindow(const char* szTitle)
        !            32: {
        !            33:        VERIFY(Create(NULL, szTitle,
        !            34:                WS_OVERLAPPEDWINDOW, rectDefault, NULL, "ShowFont"));
        !            35: }
        !            36: 
        !            37: int CMainWindow::OnCreate(LPCREATESTRUCT)
        !            38: {
        !            39:        OnFontChange();
        !            40:        myFont = new CFont;
        !            41:        myFont->CreateFont(
        !            42:                10,                                      /* height           */
        !            43:                10,                                      /* width            */
        !            44:                0,                                       /* escapement       */
        !            45:                0,                                       /* orientation      */
        !            46:                FW_NORMAL,                               /* weight           */
        !            47:                FALSE,                                   /* italic           */
        !            48:                FALSE,                                   /* underline        */
        !            49:                FALSE,                                   /* strikeout        */
        !            50:                OEM_CHARSET,                             /* charset          */
        !            51:                OUT_DEFAULT_PRECIS,                      /* out precision    */
        !            52:                CLIP_DEFAULT_PRECIS,                     /* clip precision   */
        !            53:                DEFAULT_QUALITY,                         /* quality          */
        !            54:                FIXED_PITCH | FF_MODERN,                 /* pitch and family */
        !            55:                "Courier");                              /* typeface         */
        !            56: 
        !            57:        VERIFY(oemFont.CreateStockObject(OEM_FIXED_FONT));
        !            58:        VERIFY(ansiFixedFont.CreateStockObject(ANSI_FIXED_FONT));
        !            59:        VERIFY(ansiVarFont.CreateStockObject(ANSI_VAR_FONT));
        !            60:        VERIFY(systemFont.CreateStockObject(SYSTEM_FONT));
        !            61:        VERIFY(deviceFont.CreateStockObject(DEVICE_DEFAULT_FONT));
        !            62: 
        !            63:        pTheFont = &systemFont;
        !            64:        LOGFONT logFont;
        !            65:        pTheFont->GetObject(sizeof(LOGFONT), &logFont);
        !            66:        strcpy(szWindowTitle, szAppName);
        !            67:        strcat(szWindowTitle, "SYSTEM");
        !            68:        SetWindowText(szWindowTitle);
        !            69: 
        !            70:        for (int i=0; i<64; i++)
        !            71:        {
        !            72:                outputText[0][i] = i;
        !            73:                outputText[1][i] = i+64;
        !            74:                outputText[2][i] = i+128;
        !            75:                outputText[3][i] = i+192;
        !            76:        }
        !            77:        return 0;
        !            78: }
        !            79: 
        !            80: void CMainWindow::SetFaceName()
        !            81: {
        !            82:        char buf[80];
        !            83: 
        !            84:        CClientDC dc(this);
        !            85:        dc.SelectObject(pTheFont);
        !            86:        strcpy(szWindowTitle, szAppName);
        !            87:        dc.GetTextFace(80, buf);
        !            88:        strcat(szWindowTitle, buf);
        !            89:        SetWindowText(szWindowTitle);
        !            90: }
        !            91: 
        !            92: void CMainWindow::OnExit()
        !            93: {
        !            94:        DestroyWindow();
        !            95: }
        !            96: 
        !            97: /////////////////////////////////////////////////////////////////////////////
        !            98: // Main message handling
        !            99: 
        !           100: void CMainWindow::OnPaint()
        !           101: {
        !           102:        CPaintDC dc(this);
        !           103:        InitDC(dc); // Prepare the DC in a common way.
        !           104: 
        !           105:        // Character set is drawn as a background.
        !           106:        //
        !           107:        if (idPaint == IDM_SHOWCHARSET)
        !           108:                ShowCharacterSet(dc, pTheFont);
        !           109: }
        !           110: 
        !           111: void CMainWindow::OnLButtonUp(UINT, CPoint pt)
        !           112: {
        !           113:        // Draw the string where the mouse was clicked.
        !           114:        //
        !           115:        ptCurrent = pt;
        !           116:        ShowString();
        !           117: }
        !           118: 
        !           119: void CMainWindow::OnShowCharSet()
        !           120: {
        !           121:        Invalidate(TRUE);
        !           122:        idPaint = GetCurrentMessage()->wParam;
        !           123: }
        !           124: 
        !           125: void CMainWindow::OnClear()
        !           126: {
        !           127:        // Clear the window.
        !           128:        //
        !           129:        Invalidate(TRUE);
        !           130:        idPaint = 0;
        !           131: }
        !           132: 
        !           133: /////////////////////////////////////////////////////////////////////////////
        !           134: // Menu commands for selecting from standard fonts.
        !           135: 
        !           136: void CMainWindow::SetFontFromMenu(CFont& newFont)
        !           137: {
        !           138:        // call from inside message callback
        !           139:        UINT id = GetCurrentMessage()->wParam;
        !           140: 
        !           141:        pTheFont = &newFont;
        !           142:        SetFaceName();                  /* Sets window title for us. */
        !           143:        GetMenu()->CheckMenuItem(idPrevFont, MF_UNCHECKED);
        !           144:        GetMenu()->CheckMenuItem(id, MF_CHECKED);
        !           145:        idPrevFont = id;
        !           146: }
        !           147: 
        !           148: void CMainWindow::OnOemFont()
        !           149: {
        !           150:        SetFontFromMenu(oemFont);
        !           151: }
        !           152: 
        !           153: void CMainWindow::OnAnsiFixedFont()
        !           154: {
        !           155:        SetFontFromMenu(ansiFixedFont);
        !           156: }
        !           157: 
        !           158: void CMainWindow::OnAnsiVarFont()
        !           159: {
        !           160:        SetFontFromMenu(ansiVarFont);
        !           161: }
        !           162: 
        !           163: void CMainWindow::OnSystemFont()
        !           164: {
        !           165:        SetFontFromMenu(systemFont);
        !           166: }
        !           167: 
        !           168: void CMainWindow::OnDeviceFont()
        !           169: {
        !           170:        SetFontFromMenu(deviceFont);
        !           171: }
        !           172: 
        !           173: /////////////////////////////////////////////////////////////////////////////
        !           174: 
        !           175: // This class handles the menu commands for selecting drawing colors.
        !           176: //
        !           177: // Note we completely define this modal dialog here, then use it in the
        !           178: // CMainWindow member functions, OnSetTextColor and OnSetBackgroundColor.
        !           179: 
        !           180: class CColorDlg : public CModalDialog
        !           181: {
        !           182: public:
        !           183:        CColorDlg() : CModalDialog("Colors")
        !           184:                { }
        !           185: 
        !           186:        // Attributes
        !           187:        DWORD m_rgbColor; // set this before invoking, and retrieve it afterwards
        !           188: 
        !           189:        UINT GetRed()
        !           190:                { return GetDlgItemInt(ID_RED, NULL, FALSE); }
        !           191:        void SetRed(UINT nColor)
        !           192:                { SetDlgItemInt(ID_RED, nColor, FALSE); }
        !           193: 
        !           194:        UINT GetGreen()
        !           195:                { return GetDlgItemInt(ID_GREEN, NULL, FALSE); }
        !           196:        void SetGreen(UINT nColor)
        !           197:                { SetDlgItemInt(ID_GREEN, nColor, FALSE); }
        !           198: 
        !           199:        UINT GetBlue()
        !           200:                { return GetDlgItemInt(ID_BLUE, NULL, FALSE); }
        !           201:        void SetBlue(UINT nColor)
        !           202:                { SetDlgItemInt(ID_BLUE, nColor, FALSE); }
        !           203: 
        !           204:        BOOL OnInitDialog()
        !           205:        {
        !           206:                SetRed(GetRValue(m_rgbColor));
        !           207:                SetGreen(GetGValue(m_rgbColor));
        !           208:                SetBlue(GetBValue(m_rgbColor));
        !           209:                return TRUE;
        !           210:        }
        !           211: 
        !           212:        void OnOK()
        !           213:        {
        !           214:                m_rgbColor = RGB(GetRed(), GetGreen(), GetBlue());
        !           215:                EndDialog(IDOK);
        !           216:        }
        !           217: 
        !           218:        // Note: OnCancel predefined to end dialog and return IDCANCEL.
        !           219: };
        !           220: 
        !           221: void CMainWindow::OnSetTextColor()
        !           222: {
        !           223:        CColorDlg   dlg;
        !           224:        dlg.m_rgbColor = rgbTextColor;
        !           225:        if (dlg.DoModal() == IDOK)
        !           226:                rgbTextColor = dlg.m_rgbColor;
        !           227: }
        !           228: 
        !           229: void CMainWindow::OnSetBackgroundColor()
        !           230: {
        !           231:        CColorDlg   dlg;
        !           232:        dlg.m_rgbColor = rgbBkColor;
        !           233:        if (dlg.DoModal() == IDOK)
        !           234:                rgbBkColor = dlg.m_rgbColor;
        !           235: }
        !           236: 
        !           237: /////////////////////////////////////////////////////////////////////////////
        !           238: 
        !           239: // These handle the menu commands for selecting drawing modes.
        !           240: 
        !           241: void CMainWindow::OnSetOpaque()
        !           242: {
        !           243:        nBkMode = OPAQUE;
        !           244:        GetMenu()->CheckMenuItem(IDM_TRANSPARENT, MF_UNCHECKED);
        !           245:        GetMenu()->CheckMenuItem(IDM_OPAQUE, MF_CHECKED);
        !           246: }
        !           247: 
        !           248: void CMainWindow::OnSetTransparent()
        !           249: {
        !           250:        nBkMode = TRANSPARENT;
        !           251:        GetMenu()->CheckMenuItem(IDM_OPAQUE,  MF_UNCHECKED);
        !           252:        GetMenu()->CheckMenuItem(IDM_TRANSPARENT,  MF_CHECKED);
        !           253: }
        !           254: 
        !           255: /////////////////////////////////////////////////////////////////////////////
        !           256: 
        !           257: // These routines handle the menu commands for selecting drawing alignment.
        !           258: 
        !           259: void CMainWindow::SetAlignFromMenu(short newAlign)
        !           260: {
        !           261:        // This routine assumes that a function listed in a message map is
        !           262:        // calling us, so that "GetCurrentMessage" works.
        !           263:        //
        !           264:        UINT id = GetCurrentMessage()->wParam;
        !           265: 
        !           266:        nAlignLCR = newAlign;
        !           267:        GetMenu()->CheckMenuItem(idPrevHAlign, MF_UNCHECKED);
        !           268:        GetMenu()->CheckMenuItem(id, MF_CHECKED);
        !           269:        idPrevHAlign = id;
        !           270: }
        !           271: 
        !           272: void CMainWindow::OnSetAlignLeft()
        !           273: {
        !           274:        SetAlignFromMenu(TA_LEFT);
        !           275: }
        !           276: 
        !           277: void CMainWindow::OnSetAlignCenter()
        !           278: {
        !           279:        SetAlignFromMenu(TA_CENTER);
        !           280: }
        !           281: 
        !           282: void CMainWindow::OnSetAlignRight()
        !           283: {
        !           284:        SetAlignFromMenu(TA_RIGHT);
        !           285: }
        !           286: 
        !           287: void CMainWindow::SetVAlignFromMenu(short newAlign)
        !           288: {
        !           289:        // This routine assumes that a function listed in a message map is
        !           290:        // calling us, so that "GetCurrentMessage" works.
        !           291:        //
        !           292:        UINT id = GetCurrentMessage()->wParam;
        !           293: 
        !           294:        nAlignTBB = newAlign;
        !           295:        GetMenu()->CheckMenuItem(idPrevVAlign, MF_UNCHECKED);
        !           296:        GetMenu()->CheckMenuItem(id, MF_CHECKED);
        !           297:        idPrevVAlign = id;
        !           298: }
        !           299: 
        !           300: void CMainWindow::OnSetAlignTop()
        !           301: {
        !           302:        SetVAlignFromMenu(TA_TOP);
        !           303: }
        !           304: 
        !           305: void CMainWindow::OnSetAlignBase()
        !           306: {
        !           307:        SetVAlignFromMenu(TA_BASELINE);
        !           308: }
        !           309: 
        !           310: void CMainWindow::OnSetAlignBottom()
        !           311: {
        !           312:        SetVAlignFromMenu(TA_BOTTOM);
        !           313: }
        !           314: 
        !           315: /////////////////////////////////////////////////////////////////////////////
        !           316: 
        !           317: // OnCreateFont:
        !           318: // Handles the menu command for creating a new font.
        !           319: //
        !           320: void CMainWindow::OnCreateFont()
        !           321: {
        !           322:        LOGFONT logFont;
        !           323: 
        !           324:        myFont->GetObject(sizeof(LOGFONT), &logFont);
        !           325:        if (DoCreateFontDlg(this, logFont))
        !           326:        {
        !           327:                delete myFont;
        !           328:                pTheFont = myFont = new CFont;
        !           329:                pTheFont->CreateFontIndirect(&logFont);
        !           330:                SetFaceName();
        !           331:                InvalidateRect(NULL, TRUE);
        !           332:        }
        !           333: }
        !           334: 
        !           335: /////////////////////////////////////////////////////////////////////////////
        !           336: 
        !           337: // CMainWindow message map:
        !           338: //
        !           339: BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
        !           340: 
        !           341:        // Window messages
        !           342:        ON_WM_CREATE()
        !           343:        ON_WM_PAINT()
        !           344:        ON_WM_LBUTTONUP()
        !           345:        ON_WM_DESTROY()
        !           346:        ON_WM_FONTCHANGE()
        !           347: 
        !           348:        // File menu
        !           349:        ON_COMMAND(IDM_ADDFONT, OnAddFont)
        !           350:        ON_COMMAND(IDM_DELFONT, OnDeleteFont)
        !           351:        ON_COMMAND(IDM_EXIT, OnExit)
        !           352:        ON_COMMAND(IDM_ABOUT, OnAbout)
        !           353: 
        !           354:        // Show menu
        !           355:        ON_COMMAND(IDM_SHOWSTRING, ShowString)
        !           356:        ON_COMMAND(IDM_SHOWCHARSET, OnShowCharSet)
        !           357:        ON_COMMAND(IDM_SHOWLOGFONT, OnShowLogFont)
        !           358:        ON_COMMAND(IDM_SHOWTEXTMETRICS, OnShowTextMetric)
        !           359:        ON_COMMAND(IDM_CLEAR, OnClear)
        !           360: 
        !           361:        // Font menu
        !           362:        ON_COMMAND(IDM_SYSTEM, OnSystemFont)
        !           363:        ON_COMMAND(IDM_ANSIFIXED, OnAnsiFixedFont)
        !           364:        ON_COMMAND(IDM_ANSIVAR, OnAnsiVarFont)
        !           365:        ON_COMMAND(IDM_OEM, OnOemFont)
        !           366:        ON_COMMAND(IDM_DEVICEDEF, OnDeviceFont)
        !           367:        ON_COMMAND(IDM_SELECTFONT, OnSelectFont)
        !           368:        ON_COMMAND(IDM_CFONT, OnCreateFont)
        !           369: 
        !           370:        // Options menu
        !           371:        ON_COMMAND(IDM_TEXTCOLOR, OnSetTextColor)
        !           372:        ON_COMMAND(IDM_BACKGROUNDCOLOR, OnSetBackgroundColor)
        !           373:        ON_COMMAND(IDM_OPAQUE, OnSetOpaque)
        !           374:        ON_COMMAND(IDM_TRANSPARENT, OnSetTransparent)
        !           375:        ON_COMMAND(IDM_ALIGNLEFT, OnSetAlignLeft)
        !           376:        ON_COMMAND(IDM_ALIGNCENTER, OnSetAlignCenter)
        !           377:        ON_COMMAND(IDM_ALIGNRIGHT, OnSetAlignRight)
        !           378:        ON_COMMAND(IDM_ALIGNTOP, OnSetAlignTop)
        !           379:        ON_COMMAND(IDM_ALIGNBASE, OnSetAlignBase)
        !           380:        ON_COMMAND(IDM_ALIGNBOTTOM, OnSetAlignBottom)
        !           381: END_MESSAGE_MAP()

unix.superglobalmegacorp.com

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