Annotation of mstools/mfc/src/winctrl.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: // NOTE: the IMPLEMENT_DYNAMIC lines for CListBox, CComboBox, CButton
        !            27: // are in WINDOW.CPP, since they are only used by Self Draw controls we reduce
        !            28: // granularity by putting them there.
        !            29: 
        !            30: 
        !            31: /////////////////////////////////////////////////////////////////////////////
        !            32: // CStatic
        !            33: 
        !            34: IMPLEMENT_DYNAMIC(CStatic, CWnd)
        !            35: 
        !            36: WNDPROC* CStatic::GetSuperWndProcAddr()
        !            37: {
        !            38:        static WNDPROC pfnSuper;
        !            39:        return &pfnSuper;
        !            40: }
        !            41: 
        !            42: BOOL CStatic::Create(LPCSTR lpText, DWORD dwStyle,
        !            43:                const RECT& rect, CWnd* pParentWnd, UINT nID)
        !            44: {
        !            45:        return CWnd::Create("STATIC", lpText, dwStyle, rect, pParentWnd, nID);
        !            46: }
        !            47: 
        !            48: /////////////////////////////////////////////////////////////////////////////
        !            49: // CButton
        !            50: 
        !            51: 
        !            52: WNDPROC* CButton::GetSuperWndProcAddr()
        !            53: {
        !            54:        static WNDPROC pfnSuper;
        !            55:        return &pfnSuper;
        !            56: }
        !            57: 
        !            58: BOOL CButton::Create(LPCSTR lpCaption, DWORD dwStyle,
        !            59:                const RECT& rect, CWnd* pParentWnd, UINT nID)
        !            60: {
        !            61:        return CWnd::Create("BUTTON", lpCaption, dwStyle, rect, pParentWnd, nID);
        !            62: }
        !            63: 
        !            64: // Helper for radio buttons
        !            65: int CWnd::GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton)
        !            66: {
        !            67:        for (int nID = nIDFirstButton; nID <= nIDLastButton; nID++)
        !            68:        {
        !            69:                if (IsDlgButtonChecked(nID))
        !            70:                        return nID; // id that matched
        !            71:        }
        !            72:        return 0; // invalid ID
        !            73: }
        !            74: 
        !            75: // Derived class is responsible for implementing all of these handlers
        !            76: //   for owner/self draw controls
        !            77: void CButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
        !            78:        { ASSERT(FALSE); }
        !            79: 
        !            80: /////////////////////////////////////////////////////////////////////////////
        !            81: // CListBox
        !            82: 
        !            83: 
        !            84: WNDPROC* CListBox::GetSuperWndProcAddr()
        !            85: {
        !            86:        static WNDPROC pfnSuper;
        !            87:        return &pfnSuper;
        !            88: }
        !            89: 
        !            90: BOOL CListBox::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
        !            91:                UINT nID)
        !            92: {
        !            93:        return CWnd::Create("LISTBOX", NULL, dwStyle, rect, pParentWnd, nID);
        !            94: }
        !            95: 
        !            96: // Derived class is responsible for implementing these handlers
        !            97: //   for owner/self draw controls (except for the optional DeleteItem)
        !            98: void CListBox::DrawItem(LPDRAWITEMSTRUCT)
        !            99:        { ASSERT(FALSE); }
        !           100: void CListBox::MeasureItem(LPMEASUREITEMSTRUCT)
        !           101:        { ASSERT(FALSE); }
        !           102: int CListBox::CompareItem(LPCOMPAREITEMSTRUCT)
        !           103:        { ASSERT(FALSE); return 0; }
        !           104: void CListBox::DeleteItem(LPDELETEITEMSTRUCT)
        !           105:        { /* default to nothing */ }
        !           106: 
        !           107: /////////////////////////////////////////////////////////////////////////////
        !           108: // CComboBox
        !           109: 
        !           110: 
        !           111: WNDPROC* CComboBox::GetSuperWndProcAddr()
        !           112: {
        !           113:        static WNDPROC pfnSuper;
        !           114:        return &pfnSuper;
        !           115: }
        !           116: 
        !           117: BOOL CComboBox::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
        !           118:                UINT nID)
        !           119: {
        !           120:        return CWnd::Create("COMBOBOX", NULL, dwStyle, rect, pParentWnd, nID);
        !           121: }
        !           122: 
        !           123: // Derived class is responsible for implementing these handlers
        !           124: //   for owner/self draw controls (except for the optional DeleteItem)
        !           125: void CComboBox::DrawItem(LPDRAWITEMSTRUCT)
        !           126:        { ASSERT(FALSE); }
        !           127: void CComboBox::MeasureItem(LPMEASUREITEMSTRUCT)
        !           128:        { ASSERT(FALSE); }
        !           129: int CComboBox::CompareItem(LPCOMPAREITEMSTRUCT)
        !           130:        { ASSERT(FALSE); return 0; }
        !           131: void CComboBox::DeleteItem(LPDELETEITEMSTRUCT)
        !           132:        { /* default to nothing */ }
        !           133: 
        !           134: /////////////////////////////////////////////////////////////////////////////
        !           135: // CEdit
        !           136: 
        !           137: IMPLEMENT_DYNAMIC(CEdit, CWnd)
        !           138: 
        !           139: WNDPROC* CEdit::GetSuperWndProcAddr()
        !           140: {
        !           141:        static WNDPROC pfnSuper;
        !           142:        return &pfnSuper;
        !           143: }
        !           144: 
        !           145: BOOL CEdit::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
        !           146: {
        !           147:        return CWnd::Create("EDIT", NULL, dwStyle, rect, pParentWnd, nID);
        !           148: }
        !           149: 
        !           150: /////////////////////////////////////////////////////////////////////////////
        !           151: // CScrollBar
        !           152: 
        !           153: IMPLEMENT_DYNAMIC(CScrollBar, CWnd)
        !           154: 
        !           155: WNDPROC* CScrollBar::GetSuperWndProcAddr()
        !           156: {
        !           157:        static WNDPROC pfnSuper;
        !           158:        return &pfnSuper;
        !           159: }
        !           160: 
        !           161: BOOL CScrollBar::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
        !           162:                UINT nID)
        !           163: {
        !           164:        return CWnd::Create("SCROLLBAR", NULL, dwStyle, rect, pParentWnd, nID);
        !           165: }
        !           166: 
        !           167: /////////////////////////////////////////////////////////////////////////////
        !           168: // Extra CWnd support for dynamic subclassing of controls
        !           169: 
        !           170: BOOL CWnd::SubclassWindow(HWND hWnd)
        !           171: {
        !           172:        if (!Attach(hWnd))
        !           173:                return NULL;
        !           174: 
        !           175:        // now hook into the AFX WndProc
        !           176:        WNDPROC* lplpfn = GetSuperWndProcAddr();
        !           177:        WNDPROC oldWndProc = (WNDPROC)::SetWindowLong(hWnd, GWL_WNDPROC,
        !           178:                (DWORD)(WNDPROC)AfxWndProc);
        !           179:        ASSERT(oldWndProc != (WNDPROC)AfxWndProc);
        !           180:        
        !           181:        if (*lplpfn == NULL)
        !           182:                *lplpfn = oldWndProc;   // the first edit control created
        !           183:        return TRUE;
        !           184: }
        !           185: 
        !           186: BOOL CWnd::SubclassDlgItem(UINT nID, CWnd* pParent)
        !           187: {
        !           188:        HWND hWndControl = ::GetDlgItem(pParent->m_hWnd, nID);
        !           189:        if (hWndControl == NULL)
        !           190:                return FALSE;
        !           191:        return SubclassWindow(hWndControl);
        !           192: }
        !           193: 
        !           194: /////////////////////////////////////////////////////////////////////////////

unix.superglobalmegacorp.com

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