Annotation of mstools/mfc/src/winbtn.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: #ifdef AFX_CORE_SEG
        !            16: #pragma code_seg(AFX_CORE_SEG)
        !            17: #endif
        !            18: 
        !            19: #ifdef _DEBUG
        !            20: #undef THIS_FILE
        !            21: static char BASED_CODE THIS_FILE[] = __FILE__;
        !            22: #define new DEBUG_NEW
        !            23: #endif
        !            24: 
        !            25: /////////////////////////////////////////////////////////////////////////////
        !            26: // CBitmapButton
        !            27: 
        !            28: IMPLEMENT_DYNAMIC(CBitmapButton, CButton)
        !            29: 
        !            30: // LoadBitmaps will load in the two bitmaps
        !            31: BOOL CBitmapButton::LoadBitmaps(LPCSTR lpBitmapResource,
        !            32:        LPCSTR lpBitmapResourceSel, LPCSTR lpBitmapResourceFocus /* = NULL */)
        !            33: {
        !            34:        m_bitmap.DeleteObject();
        !            35:        if (!m_bitmap.LoadBitmap(lpBitmapResource))
        !            36:        {
        !            37:                TRACE("Failed to load bitmap for normal image\n");
        !            38:                return FALSE;
        !            39:        }
        !            40:        if (lpBitmapResourceSel != NULL)
        !            41:        {
        !            42:                m_bitmapSel.DeleteObject();
        !            43:                if (!m_bitmapSel.LoadBitmap(lpBitmapResourceSel))
        !            44:                {
        !            45:                        TRACE("Failed to load bitmap for selected image\n");
        !            46:                        return FALSE;
        !            47:                }
        !            48:        }
        !            49:        if (lpBitmapResourceFocus != NULL)
        !            50:        {
        !            51:                m_bitmapFocus.DeleteObject();
        !            52:                if (!m_bitmapFocus.LoadBitmap(lpBitmapResourceFocus))
        !            53:                {
        !            54:                        TRACE("Failed to load bitmap for focused image\n");
        !            55:                        return FALSE;
        !            56:                }
        !            57:        }
        !            58:        return TRUE;
        !            59: }
        !            60: 
        !            61: // SizeToContent will resize the button to the size of the bitmap
        !            62: void CBitmapButton::SizeToContent()
        !            63: {
        !            64:        ASSERT(m_bitmap.m_hObject != NULL);
        !            65:        CSize bitmapSize;
        !            66:        BITMAP bmInfo;
        !            67:        VERIFY(m_bitmap.GetObject(sizeof(bmInfo), &bmInfo) == sizeof(bmInfo));
        !            68:        VERIFY(SetWindowPos(NULL, -1, -1, bmInfo.bmWidth, bmInfo.bmHeight,
        !            69:                SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOACTIVATE));
        !            70: }
        !            71: 
        !            72: // Autoload will load the bitmap resources based on the text of
        !            73: //  the button
        !            74: // Using suffices "U", "D" and "F" for up/down/focus (must have all three)
        !            75: BOOL CBitmapButton::AutoLoad(UINT nID, CWnd* pParent)
        !            76: {
        !            77:        // first attach the CBitmapButton to the dialog control
        !            78:        if (!SubclassDlgItem(nID, pParent))
        !            79:                return FALSE;
        !            80: 
        !            81:        CString buttonName;
        !            82:        GetWindowText(buttonName);
        !            83:        ASSERT(!buttonName.IsEmpty());      // must provide a title
        !            84: 
        !            85:        if (!LoadBitmaps(buttonName + "U", buttonName + "D", buttonName + "F"))
        !            86:                return FALSE;
        !            87: 
        !            88:        // size to content
        !            89:        SizeToContent();
        !            90:        return TRUE;
        !            91: }
        !            92: 
        !            93: // Draw the appropriate bitmap
        !            94: void CBitmapButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
        !            95: {
        !            96:        // must have at least the first bitmap loaded before calling DrawItem
        !            97:        ASSERT(m_bitmap.m_hObject != NULL);     // required
        !            98: 
        !            99:        // use the main bitmap for up, the selected bitmap for down
        !           100:        CBitmap* pBitmap = &m_bitmap;
        !           101:        if ((lpDIS->itemState & ODS_SELECTED) && m_bitmapSel.m_hObject != NULL)
        !           102:                pBitmap = &m_bitmapSel;
        !           103:        else if ((lpDIS->itemState & ODS_FOCUS) && m_bitmapFocus.m_hObject != NULL)
        !           104:                pBitmap = &m_bitmapFocus;   // third image for focused
        !           105: 
        !           106:        if (lpDIS->itemAction & (ODA_DRAWENTIRE|ODA_SELECT|ODA_FOCUS))
        !           107:        {
        !           108:                // draw the whole button
        !           109:                CDC* pDC = CDC::FromHandle(lpDIS->hDC);
        !           110:                CDC memDC;
        !           111:                memDC.CreateCompatibleDC(pDC);
        !           112:                CBitmap* pOld = memDC.SelectObject(pBitmap);
        !           113:                if (pOld == NULL)
        !           114:                        return;     // destructors will clean up
        !           115: 
        !           116:                CRect rect;
        !           117:                rect.CopyRect(&lpDIS->rcItem);
        !           118:                pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
        !           119:                        &memDC, 0, 0, SRCCOPY);
        !           120:                memDC.SelectObject(pOld);
        !           121:                // will delete memDC
        !           122:        }
        !           123: }
        !           124: 
        !           125: /////////////////////////////////////////////////////////////////////////////

unix.superglobalmegacorp.com

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