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

1.1     ! root        1: // This is a part of the Microsoft Foundation Classes C++ library.
        !             2: // Copyright (C) 1992 Microsoft Corporation
        !             3: // All rights reserved.
        !             4: //
        !             5: // This source code is only intended as a supplement to the
        !             6: // Microsoft Foundation Classes Reference and Microsoft
        !             7: // QuickHelp documentation provided with the library.
        !             8: // See these sources for detailed information regarding the
        !             9: // Microsoft Foundation Classes product.
        !            10: 
        !            11: #include "minsvrMI.h"
        !            12: 
        !            13: // Main window and user interface parts
        !            14: 
        !            15: /////////////////////////////////////////////////////////////////////////////
        !            16: 
        !            17: // message map since we are a window
        !            18: BEGIN_MESSAGE_MAP(CMiApp, CFrameWnd)
        !            19:        // windows messages
        !            20:        ON_MESSAGE(WM_CLOSE, OnCloseWindow)
        !            21:                // Both CWnd and COleServer have an 'OnClose' member function but
        !            22:                //  they differ only by the return type.
        !            23:                // Unfortunately C++ multiple inheritance rules prevent us from
        !            24:                //  from overriding either of them.  We use the more general
        !            25:                //  form of message map entries to replace CWnd::OnClose with
        !            26:                //  CMiApp::OnCloseWindow to get around this restriction of C++.
        !            27: 
        !            28:        // menu commands
        !            29:        ON_COMMAND(IDM_UPDATE, OnUpdateClient)
        !            30:        ON_COMMAND(IDM_EXIT, OnFileExit)
        !            31:        ON_COMMAND(IDM_CHANGESTRING, OnChangeString)
        !            32:        ON_COMMAND(IDM_ABOUT, OnAbout)
        !            33: END_MESSAGE_MAP()
        !            34: 
        !            35: /////////////////////////////////////////////////////////////////////////////
        !            36: // File menu commands
        !            37: 
        !            38: void CMiApp::OnFileExit()
        !            39: {
        !            40:        // to shut-down, just revoke the server, OLE will terminate the app
        !            41:        COleServer::BeginRevoke();
        !            42: }
        !            43: 
        !            44: LONG CMiApp::OnCloseWindow(UINT, LONG)
        !            45: {
        !            46:        OnFileExit();
        !            47:        return 0;
        !            48: }
        !            49: 
        !            50: void CMiApp::PostNcDestroy()
        !            51: {
        !            52:        // CFrameWnd::PostNcDestroy will 'delete this'.
        !            53:        // since the CMiApp is-a CFrameWnd we don't want PostNcDestroy
        !            54:        //  to do anything - so we override it here to remove the default
        !            55:        //  behaviour.
        !            56: }
        !            57: 
        !            58: /////////////////////////////////////////////////////////////////////////////
        !            59: 
        !            60: void CMiApp::OnUpdateClient()
        !            61: {
        !            62:        TRY
        !            63:        {
        !            64:                NotifySaved();
        !            65:        }
        !            66:        CATCH (CException, e)
        !            67:        {
        !            68:                MessageBox("Couldn't update client");
        !            69:        }
        !            70:        END_CATCH
        !            71: }
        !            72: 
        !            73: // Help menu commands
        !            74: void CMiApp::OnAbout()
        !            75: {
        !            76:        CModalDialog dlg("AboutBox");
        !            77:        dlg.DoModal();
        !            78: }
        !            79: 
        !            80: /////////////////////////////////////////////////////////////////////////////
        !            81: // OLE Item UI
        !            82: 
        !            83: OLESTATUS CMiApp::OnShow(BOOL /* bTakeFocus */)
        !            84: {
        !            85:        // make sure server is the topmost window
        !            86:        BringWindowToTop();
        !            87:        return OLE_OK;
        !            88: }
        !            89: 
        !            90: ///////////////////////////////////////////
        !            91: // Simple dialog for changing the string
        !            92: 
        !            93: class CChangeDlg : public CModalDialog
        !            94: {
        !            95: protected:
        !            96:        CString&    m_rString;
        !            97: 
        !            98: public:
        !            99:        CChangeDlg(CString& rString)
        !           100:                : CModalDialog("ChangeDlg"), m_rString(rString)
        !           101:                        { }
        !           102: 
        !           103:        BOOL OnInitDialog()
        !           104:        {
        !           105:                GetDlgItem(IDC_EDIT1)->SetWindowText(m_rString);
        !           106:                return TRUE;
        !           107:        }
        !           108:        void OnOK()
        !           109:        {
        !           110:                GetDlgItem(IDC_EDIT1)->GetWindowText(m_rString);
        !           111:                EndDialog(IDOK);
        !           112:        }
        !           113: };
        !           114: 
        !           115: 
        !           116: void CMiApp::OnChangeString()
        !           117: {
        !           118:        CChangeDlg dlg(m_data);
        !           119:        if (dlg.DoModal() == IDOK && COleServerDoc::IsOpen())
        !           120:                OnUpdateClient(); // example of immediately updating client
        !           121: }
        !           122: 
        !           123: /////////////////////////////////////////////////////////////////////////////
        !           124: // Drawing items into bitmap or metafile
        !           125: 
        !           126: BOOL CMiApp::OnDraw(CMetaFileDC* pDC)
        !           127: {
        !           128:        ASSERT_VALID(pDC);
        !           129:        CSize textSize;
        !           130: 
        !           131:        // first calculate the text size in MM_TEXT units
        !           132:        {
        !           133:                CWindowDC screenDC(NULL);
        !           134:                textSize = screenDC.GetTextExtent(m_data, m_data.GetLength());
        !           135:        }
        !           136: 
        !           137:        // if you want the item to always be drawn in a specific mapping
        !           138:        //  mode set it here.
        !           139: 
        !           140:        // Otherwise the OLE DLLs will scale the metafile to fit the
        !           141:        //  client specified size.  Setting the viewport size/extent
        !           142:        //  determines the relative scale of everything.
        !           143: 
        !           144:        int cx = textSize.cx + 100;
        !           145:        int cy = (cx * 4) / 3;      // nice aspect ratio
        !           146:        TRACE("Item drawing size is %d x %d\n", cx, cy);
        !           147:        pDC->SetWindowExt(cx, cy);
        !           148: 
        !           149:        // Draw a shaded circle
        !           150:        pDC->SelectStockObject(LTGRAY_BRUSH);
        !           151:        pDC->Ellipse(0, 0, cx, cy);
        !           152: 
        !           153:        // draw the text in the middle (as best we can)
        !           154:        pDC->SetBkMode(TRANSPARENT);
        !           155:        pDC->TextOut((cx - textSize.cx) / 2, (cy - textSize.cy) / 2, m_data);
        !           156: 
        !           157:        return TRUE;
        !           158: }
        !           159: 
        !           160: /////////////////////////////////////////////////////////////////////////////

unix.superglobalmegacorp.com

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