Annotation of mstools/mfc/src/winmenu.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: 
        !            12: #include "afxwin.h"
        !            13: #pragma hdrstop
        !            14: 
        !            15: #include "winhand_.h"
        !            16: 
        !            17: #ifdef AFX_CORE_SEG
        !            18: #pragma code_seg(AFX_CORE_SEG)
        !            19: #endif
        !            20: 
        !            21: #ifdef _DEBUG
        !            22: #undef THIS_FILE
        !            23: static char BASED_CODE THIS_FILE[] = __FILE__;
        !            24: #define new DEBUG_NEW
        !            25: #endif
        !            26: 
        !            27: /////////////////////////////////////////////////////////////////////////////
        !            28: // Map from HMENU to CMenu *
        !            29: 
        !            30: class NEAR CMenuHandleMap : public CHandleMap
        !            31: {
        !            32: public:
        !            33:        CObject* NewTempObject(HANDLE h)
        !            34:                                {
        !            35:                                        // don't add in permanent
        !            36:                                        CMenu* p = new CMenu();
        !            37:                                        p->m_hMenu = (HMENU)h;     // set after constructed
        !            38:                                        return p;
        !            39:                                }
        !            40:        void DeleteTempObject(CObject* ob)
        !            41:                                {
        !            42:                                        ASSERT(ob->IsKindOf(RUNTIME_CLASS(CMenu)));
        !            43:                                        ((CMenu*)ob)->m_hMenu = NULL;   // clear before destructed
        !            44:                                        delete ob;
        !            45:                                }
        !            46: };
        !            47: static CMenuHandleMap NEAR hMenuMap;
        !            48: 
        !            49: // Map from HMENU to CMenu*
        !            50: CMenu*
        !            51: CMenu::FromHandle(HMENU hMenu)
        !            52: {
        !            53:        return (CMenu*)hMenuMap.FromHandle(hMenu);
        !            54: }
        !            55: 
        !            56: void
        !            57: CMenu::DeleteTempMap()
        !            58: {
        !            59:        hMenuMap.DeleteTemp();
        !            60: }
        !            61: 
        !            62: /////////////////////////////////////////////////////////////////////////////
        !            63: // CMenu
        !            64: 
        !            65: IMPLEMENT_DYNAMIC(CMenu, CObject)
        !            66: 
        !            67: #ifdef _DEBUG
        !            68: void CMenu::AssertValid() const
        !            69: {
        !            70:        CObject::AssertValid();
        !            71: }
        !            72: 
        !            73: void CMenu::Dump(CDumpContext& dc) const
        !            74: {
        !            75:        CObject::Dump(dc);
        !            76:        dc << "m_hMenu = " << (void NEAR*)m_hMenu;
        !            77: }
        !            78: #endif
        !            79: 
        !            80: BOOL
        !            81: CMenu::Attach(HMENU hMenu)
        !            82: {
        !            83:        ASSERT(m_hMenu == NULL);        // only attach once, detach on destroy
        !            84:        if (hMenu == NULL)
        !            85:                return FALSE;
        !            86:        hMenuMap.SetPermanent(m_hMenu = hMenu, this);
        !            87:        return TRUE;
        !            88: }
        !            89: 
        !            90: HMENU
        !            91: CMenu::Detach()
        !            92: {
        !            93:        HMENU hMenu;
        !            94:        if ((hMenu = m_hMenu) != NULL)
        !            95:                hMenuMap.RemovePermanent(m_hMenu);
        !            96:        m_hMenu = NULL;
        !            97:        return hMenu;
        !            98: }
        !            99: 
        !           100: CMenu::~CMenu()
        !           101: {
        !           102:        DestroyMenu();
        !           103: }
        !           104: 
        !           105: BOOL
        !           106: CMenu::DestroyMenu()
        !           107: {
        !           108:        if (m_hMenu == NULL)
        !           109:                return FALSE;
        !           110:        return ::DestroyMenu(Detach());
        !           111: }
        !           112: 
        !           113: /////////////////////////////////////////////////////////////////////////////
        !           114: // Self-drawing menu items
        !           115: 
        !           116: void CMenu::DrawItem(LPDRAWITEMSTRUCT /* lpDrawItemStruct */)
        !           117: {
        !           118:        // default drawing does nothing
        !           119: }
        !           120: 
        !           121: void CMenu::MeasureItem(LPMEASUREITEMSTRUCT /* lpMeasureItemStruct */)
        !           122: {
        !           123:        // default drawing does nothing
        !           124: }
        !           125: 
        !           126: 
        !           127: /////////////////////////////////////////////////////////////////////////////

unix.superglobalmegacorp.com

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