home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / atl / subedit / atledit.h < prev    next >
C/C++ Source or Header  |  1998-03-26  |  4KB  |  119 lines

  1. // AtlEdit.h : Declaration of the CAtlEdit
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12.  
  13. #include "resource.h"       // main symbols
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CAtlEdit
  17. class CAtlEdit :
  18.     public CComObjectRoot,
  19.     public CComCoClass<CAtlEdit, &CLSID_CAtlEdit>,
  20.     public CComControl<CAtlEdit>,
  21.     public IDispatchImpl<IAtlEdit, &IID_IAtlEdit, &LIBID_SUBEDITLib>,
  22.     public IProvideClassInfo2Impl<&CLSID_CAtlEdit, NULL, &LIBID_SUBEDITLib>,
  23.     public IPersistStreamInitImpl<CAtlEdit>,
  24.     public IPersistStorageImpl<CAtlEdit>,
  25.     public IQuickActivateImpl<CAtlEdit>,
  26.     public IOleControlImpl<CAtlEdit>,
  27.     public IOleObjectImpl<CAtlEdit>,
  28.     public IOleInPlaceActiveObjectImpl<CAtlEdit>,
  29.     public IViewObjectExImpl<CAtlEdit>,
  30.     public IOleInPlaceObjectWindowlessImpl<CAtlEdit>,
  31.     public IDataObjectImpl<CAtlEdit>,
  32.     public ISpecifyPropertyPagesImpl<CAtlEdit>
  33. {
  34. public:
  35.     CContainedWindow m_EditCtrl;
  36.  
  37.     CAtlEdit() : m_EditCtrl(_T("EDIT"), this, 1)
  38.     {
  39.         m_bWindowOnly = TRUE;
  40.     }
  41.  
  42. DECLARE_REGISTRY_RESOURCEID(IDR_AtlEdit)
  43.  
  44.  
  45. BEGIN_COM_MAP(CAtlEdit)
  46.     COM_INTERFACE_ENTRY(IAtlEdit)
  47.     COM_INTERFACE_ENTRY(IDispatch)
  48.     COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  49.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  50.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  51.     COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
  52.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
  53.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
  54.     COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  55.     COM_INTERFACE_ENTRY_IMPL(IOleControl)
  56.     COM_INTERFACE_ENTRY_IMPL(IOleObject)
  57.     COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
  58.     COM_INTERFACE_ENTRY_IMPL(IPersistStorage)
  59.     COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
  60.     COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages)
  61.     COM_INTERFACE_ENTRY_IMPL(IDataObject)
  62.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  63.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  64. END_COM_MAP()
  65.  
  66. BEGIN_PROPERTY_MAP(CAtlEdit)
  67.     // PROP_ENTRY(OLESTR("Description"), dispid, clsid)
  68.     PROP_PAGE(CLSID_CColorPropPage)
  69. END_PROPERTY_MAP()
  70.  
  71.  
  72. BEGIN_MSG_MAP(CAtlEdit)
  73.     MESSAGE_HANDLER(WM_PAINT, OnPaint)
  74.     MESSAGE_HANDLER(WM_CREATE, OnCreate)
  75.     MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)
  76. ALT_MSG_MAP(1)
  77.     MESSAGE_HANDLER(WM_CHAR, OnChar)
  78. END_MSG_MAP()
  79.  
  80. // IAtlEdit
  81. public:
  82.     HRESULT OnDraw(ATL_DRAWINFO&)
  83.     {
  84.         return S_OK;
  85.     }
  86.     LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  87.     {
  88.         RECT rc;
  89.         GetWindowRect(&rc);
  90.         rc.right -= rc.left;
  91.         rc.bottom -= rc.top;
  92.         rc.top = rc.left = 0;
  93.         m_EditCtrl.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL);
  94.         return 0;
  95.     }
  96.     STDMETHOD(SetObjectRects)(LPCRECT prcPos,LPCRECT prcClip)
  97.     {
  98.         IOleInPlaceObjectWindowlessImpl<CAtlEdit>::SetObjectRects(prcPos, prcClip);
  99.         int cx, cy;
  100.         cx = prcPos->right - prcPos->left;
  101.         cy = prcPos->bottom - prcPos->top;
  102.         ::SetWindowPos(m_EditCtrl.m_hWnd, NULL, 0,
  103.                      0, cx, cy, SWP_NOZORDER | SWP_NOACTIVATE);
  104.         return S_OK;
  105.     }
  106.     LRESULT OnChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  107.     {
  108.         if (isalnum(wParam) || wParam == VK_SPACE || wParam == VK_RETURN || wParam == VK_TAB)
  109.             m_EditCtrl.DefWindowProc(WM_CHAR, wParam, lParam);
  110.         return 0;
  111.     }
  112.     LRESULT OnCtlColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  113.     {
  114.         ::SetTextColor((HDC)wParam, RGB(255,255,0));
  115.         ::SetBkColor((HDC)wParam,RGB(0,0,0));
  116.         return (LRESULT)::GetStockObject(BLACK_BRUSH);
  117.     }
  118. };
  119.