// 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" #ifdef AFXCTL_CORE2_SEG #pragma code_seg(AFXCTL_CORE2_SEG) #endif #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define new DEBUG_NEW ///////////////////////////////////////////////////////////////////////////// // CReflectorWnd BOOL CReflectorWnd::Create(const CRect& rect, HWND hWndParent) { // make sure the default window class is registered VERIFY(AfxDeferRegisterClass(AFX_WNDOLECONTROL_REG)); return CreateEx(0, AFX_WNDOLECONTROL, NULL, WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, hWndParent, 0); } void CReflectorWnd::PostNcDestroy() { if (m_pCtrl != NULL) m_pCtrl->OnReflectorDestroyed(); delete this; } LRESULT CReflectorWnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_COMMAND: case WM_NOTIFY: case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: case WM_DRAWITEM: case WM_MEASUREITEM: case WM_DELETEITEM: case WM_VKEYTOITEM: case WM_CHARTOITEM: case WM_COMPAREITEM: case WM_HSCROLL: case WM_VSCROLL: case WM_PARENTNOTIFY: if (m_pCtrl != NULL) return m_pCtrl->SendMessage(OCM__BASE + uMsg, wParam, lParam); break; case WM_SETFOCUS: if (m_pCtrl != NULL) { m_pCtrl->SetFocus(); return 0; } break; } return CWnd::WindowProc(uMsg, wParam, lParam); } void CReflectorWnd::SetControl(COleControl* pCtrl) { m_pCtrl = pCtrl; } LRESULT CParkingWnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hWndSource = NULL; switch (uMsg) { case WM_COMMAND: case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: case WM_VKEYTOITEM: case WM_CHARTOITEM: case WM_HSCROLL: case WM_VSCROLL: hWndSource = (HWND)lParam; break; case WM_NOTIFY: hWndSource = ((NMHDR*)lParam)->hwndFrom; break; case WM_DRAWITEM: hWndSource = ((DRAWITEMSTRUCT*)lParam)->hwndItem; break; case WM_MEASUREITEM: m_idMap.Lookup((void*)(DWORD)HIWORD(wParam), (void*&)hWndSource); break; case WM_DELETEITEM: hWndSource = ((DELETEITEMSTRUCT*)lParam)->hwndItem; break; case WM_COMPAREITEM: hWndSource = ((COMPAREITEMSTRUCT*)lParam)->hwndItem; break; case WM_PARENTNOTIFY: switch (LOWORD(wParam)) { case WM_CREATE: m_idMap.SetAt((void*)(DWORD)HIWORD(wParam), (HWND)lParam); hWndSource = (HWND)lParam; break; case WM_DESTROY: m_idMap.RemoveKey((void*)(DWORD)HIWORD(wParam)); hWndSource = (HWND)lParam; break; default: m_idMap.Lookup((void*)(DWORD)HIWORD(wParam), (void*&)hWndSource); break; } } if (hWndSource != NULL) return ::SendMessage(hWndSource, OCM__BASE + uMsg, wParam, lParam); else return CWnd::WindowProc(uMsg, wParam, lParam); } ///////////////////////////////////////////////////////////////////////////// // Force any extra compiler-generated code into AFX_INIT_SEG #ifdef AFX_INIT_SEG #pragma code_seg(AFX_INIT_SEG) #endif