home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
- #ifndef _AFX_NO_OCC_SUPPORT
- #include "occimpl.h"
- #endif
-
- #ifdef AFX_CORE4_SEG
- #pragma code_seg(AFX_CORE4_SEG)
- #endif
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- #define new DEBUG_NEW
-
- /////////////////////////////////////////////////////////////////////////////
- // CStatic
-
- BOOL CStatic::Create(LPCTSTR lpszText, DWORD dwStyle,
- const RECT& rect, CWnd* pParentWnd, UINT nID)
- {
- CWnd* pWnd = this;
- return pWnd->Create(_T("STATIC"), lpszText, dwStyle, rect, pParentWnd, nID);
- }
-
- CStatic::~CStatic()
- {
- DestroyWindow();
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CButton
-
- BOOL CButton::Create(LPCTSTR lpszCaption, DWORD dwStyle,
- const RECT& rect, CWnd* pParentWnd, UINT nID)
- {
- CWnd* pWnd = this;
- return pWnd->Create(_T("BUTTON"), lpszCaption, dwStyle, rect, pParentWnd, nID);
- }
-
- CButton::~CButton()
- {
- DestroyWindow();
- }
-
- // Helper for radio buttons
- int CWnd::GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton)
- {
- for (int nID = nIDFirstButton; nID <= nIDLastButton; nID++)
- {
- if (IsDlgButtonChecked(nID))
- return nID; // id that matched
- }
- return 0; // invalid ID
- }
-
- // Derived class is responsible for implementing all of these handlers
- // for owner/self draw controls
- void CButton::DrawItem(LPDRAWITEMSTRUCT)
- {
- ASSERT(FALSE);
- }
-
- BOOL CButton::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam,
- LRESULT* pResult)
- {
- if (message != WM_DRAWITEM)
- return CWnd::OnChildNotify(message, wParam, lParam, pResult);
-
- ASSERT(pResult == NULL); // no return value expected
- UNUSED(pResult); // unused in release builds
- DrawItem((LPDRAWITEMSTRUCT)lParam);
- return TRUE;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CListBox
-
- BOOL CListBox::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
- UINT nID)
- {
- CWnd* pWnd = this;
- return pWnd->Create(_T("LISTBOX"), NULL, dwStyle, rect, pParentWnd, nID);
- }
-
- CListBox::~CListBox()
- {
- DestroyWindow();
- }
-
- // Derived class is responsible for implementing these handlers
- // for owner/self draw controls (except for the optional DeleteItem)
- void CListBox::DrawItem(LPDRAWITEMSTRUCT)
- { ASSERT(FALSE); }
- void CListBox::MeasureItem(LPMEASUREITEMSTRUCT)
- { ASSERT(FALSE); }
- int CListBox::CompareItem(LPCOMPAREITEMSTRUCT)
- { ASSERT(FALSE); return 0; }
- void CListBox::DeleteItem(LPDELETEITEMSTRUCT)
- { /* default to nothing */ }
- int CListBox::VKeyToItem(UINT, UINT)
- { return Default(); }
- int CListBox::CharToItem(UINT, UINT)
- { return Default(); }
-
- BOOL CListBox::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam,
- LRESULT* pResult)
- {
- switch (message)
- {
- case WM_DRAWITEM:
- ASSERT(pResult == NULL); // no return value expected
- DrawItem((LPDRAWITEMSTRUCT)lParam);
- break;
- case WM_MEASUREITEM:
- ASSERT(pResult == NULL); // no return value expected
- MeasureItem((LPMEASUREITEMSTRUCT)lParam);
- break;
- case WM_COMPAREITEM:
- ASSERT(pResult != NULL); // return value expected
- *pResult = CompareItem((LPCOMPAREITEMSTRUCT)lParam);
- break;
- case WM_DELETEITEM:
- ASSERT(pResult == NULL); // no return value expected
- DeleteItem((LPDELETEITEMSTRUCT)lParam);
- break;
- case WM_VKEYTOITEM:
- *pResult = VKeyToItem(LOWORD(wParam), HIWORD(wParam));
- break;
- case WM_CHARTOITEM:
- *pResult = CharToItem(LOWORD(wParam), HIWORD(wParam));
- break;
- default:
- return CWnd::OnChildNotify(message, wParam, lParam, pResult);
- }
- return TRUE;
- }
-
- void CListBox::GetText(int nIndex, CString& rString) const
- {
- ASSERT(::IsWindow(m_hWnd));
- GetText(nIndex, rString.GetBufferSetLength(GetTextLen(nIndex)));
- rString.ReleaseBuffer();
- }
-
- #if (WINVER >= 0x400)
- UINT CListBox::ItemFromPoint(CPoint pt, BOOL& bOutside) const
- {
- ASSERT(::IsWindow(m_hWnd));
- DWORD dw = (DWORD)::SendMessage(m_hWnd, LB_ITEMFROMPOINT, 0, MAKELPARAM(pt.x, pt.y));
- bOutside = !!HIWORD(dw);
- return LOWORD(dw);
- }
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CComboBox
-
- BOOL CComboBox::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
- UINT nID)
- {
- CWnd* pWnd = this;
- return pWnd->Create(_T("COMBOBOX"), NULL, dwStyle, rect, pParentWnd, nID);
- }
-
- CComboBox::~CComboBox()
- {
- DestroyWindow();
- }
-
- // Derived class is responsible for implementing these handlers
- // for owner/self draw controls (except for the optional DeleteItem)
- void CComboBox::DrawItem(LPDRAWITEMSTRUCT)
- { ASSERT(FALSE); }
- void CComboBox::MeasureItem(LPMEASUREITEMSTRUCT)
- { ASSERT(FALSE); }
- int CComboBox::CompareItem(LPCOMPAREITEMSTRUCT)
- { ASSERT(FALSE); return 0; }
- void CComboBox::DeleteItem(LPDELETEITEMSTRUCT)
- { /* default to nothing */ }
-
- BOOL CComboBox::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam,
- LRESULT* pResult)
- {
- switch (message)
- {
- case WM_DRAWITEM:
- ASSERT(pResult == NULL); // no return value expected
- DrawItem((LPDRAWITEMSTRUCT)lParam);
- break;
- case WM_MEASUREITEM:
- ASSERT(pResult == NULL); // no return value expected
- MeasureItem((LPMEASUREITEMSTRUCT)lParam);
- break;
- case WM_COMPAREITEM:
- ASSERT(pResult != NULL); // return value expected
- *pResult = CompareItem((LPCOMPAREITEMSTRUCT)lParam);
- break;
- case WM_DELETEITEM:
- ASSERT(pResult == NULL); // no return value expected
- DeleteItem((LPDELETEITEMSTRUCT)lParam);
- break;
- default:
- return CWnd::OnChildNotify(message, wParam, lParam, pResult);
- }
- return TRUE;
- }
-
- void CComboBox::GetLBText(int nIndex, CString& rString) const
- {
- ASSERT(::IsWindow(m_hWnd));
- GetLBText(nIndex, rString.GetBufferSetLength(GetLBTextLen(nIndex)));
- rString.ReleaseBuffer();
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CEdit
-
- BOOL CEdit::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
- {
- CWnd* pWnd = this;
- return pWnd->Create(_T("EDIT"), NULL, dwStyle, rect, pParentWnd, nID);
- }
-
- CEdit::~CEdit()
- {
- DestroyWindow();
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CScrollBar
-
- BOOL CScrollBar::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
- UINT nID)
- {
- CWnd* pWnd = this;
- return pWnd->Create(_T("SCROLLBAR"), NULL, dwStyle, rect, pParentWnd, nID);
- }
-
- CScrollBar::~CScrollBar()
- {
- DestroyWindow();
- }
-
- #ifdef AFX_INIT_SEG
- #pragma code_seg(AFX_INIT_SEG)
- #endif
-
- IMPLEMENT_DYNAMIC(CStatic, CWnd)
- IMPLEMENT_DYNAMIC(CButton, CWnd)
- IMPLEMENT_DYNAMIC(CListBox, CWnd)
- IMPLEMENT_DYNAMIC(CComboBox, CWnd)
- IMPLEMENT_DYNAMIC(CEdit, CWnd)
- IMPLEMENT_DYNAMIC(CScrollBar, CWnd)
-
- /////////////////////////////////////////////////////////////////////////////
-