Annotation of mstools/mfc/src/winmenu.cpp, revision 1.1.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.