prevctrl.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 6k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. // PrevCtrl.h : Declaration of the CPreview
  2. #ifndef __PREVCTRL_H_
  3. #define __PREVCTRL_H_
  4. #include "resource.h"       // main symbols
  5. #include "PrevWnd.h"
  6. #include "Events.h"
  7. /////////////////////////////////////////////////////////////////////////////
  8. // CPreview
  9. class ATL_NO_VTABLE CPreview : 
  10.         public CComObjectRootEx<CComSingleThreadModel>,
  11.         public CComCoClass<CPreview, &CLSID_Preview>,
  12.         public CComControl<CPreview>,
  13.         public CStockPropImpl<CPreview, IPreview, &IID_IPreview, &LIBID_PREVIEWLib>,
  14.         public IProvideClassInfo2Impl<&CLSID_Preview, NULL, &LIBID_PREVIEWLib>,
  15. //        public IPersistStreamInitImpl<CPreview>,
  16.         public IPersistPropertyBagImpl<CPreview>,           // So we can read <PARAM>'s from our object tag
  17.         public IPersistStorageImpl<CPreview>,               // required for Embeddable objects
  18.         public IOleObjectImpl<CPreview>,                    // required for Embeddable objects
  19.         public IDataObjectImpl<CPreview>,                   // required for Embeddable objects
  20.         public IQuickActivateImpl<CPreview>,
  21.         public IOleControlImpl<CPreview>,   // REVIEW: will IOleControl::GetControlInfo help with my keyboard problems?
  22.         public IOleInPlaceActiveObjectImpl<CPreview>,       // handles resizing, active state, TranslateAccelerator
  23.         public IViewObjectExImpl<CPreview>,                 // for flicker-free drawing support
  24.         public IOleInPlaceObjectWindowlessImpl<CPreview>,   // allow for windowless operation (we don't use windowless, should we be using this interface?)
  25. //        public ISpecifyPropertyPagesImpl<CPreview>,
  26. //        public IPointerInactiveImpl<CPreview>,
  27.         public CPreviewEvents<CPreview>,                    // our event code for sending events to our container
  28.         public IConnectionPointContainerImpl<CPreview>,     // Connection Point Container for our outgoing event hooks.
  29.         public IObjectSafetyImpl<CPreview>                  // allows this control to be scripted
  30. {
  31. public:
  32.     CPreviewWnd m_cwndPreview;
  33.     CPreview()
  34.     {
  35.         // we want to be run in a window and never windowless
  36.         m_bWindowOnly = TRUE;
  37.     }
  38. DECLARE_REGISTRY_RESOURCEID(IDR_PREVIEW)
  39. DECLARE_WND_CLASS( TEXT("ShImgVw:CPreview") );
  40. BEGIN_COM_MAP(CPreview)
  41.     COM_INTERFACE_ENTRY(IPreview)
  42.     COM_INTERFACE_ENTRY(IDispatch)
  43.     COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  44.     COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
  45.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  46.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  47.     COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
  48.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
  49.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
  50.     COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  51.     COM_INTERFACE_ENTRY_IMPL(IOleControl)
  52.     COM_INTERFACE_ENTRY_IMPL(IOleObject)
  53.     COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
  54.     COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag)
  55.     COM_INTERFACE_ENTRY_IMPL(IPersistStorage)
  56. //    COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
  57. //    COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages)
  58.     COM_INTERFACE_ENTRY_IMPL(IDataObject)
  59.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  60.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  61. //    COM_INTERFACE_ENTRY_IMPL(IPointerInactive)
  62. COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  63. END_COM_MAP()
  64. BEGIN_CONNECTION_POINT_MAP(CPreview)
  65.     CONNECTION_POINT_ENTRY(DIID_DPreviewEvents)
  66. END_CONNECTION_POINT_MAP()
  67. BEGIN_PROPERTY_MAP(CPreview)
  68.     // Example entries
  69.     // PROP_ENTRY("Property Description", dispid, clsid)
  70.     PROP_PAGE(CLSID_StockColorPage)
  71. END_PROPERTY_MAP()
  72. BEGIN_MSG_MAP(CPreview)
  73.     MESSAGE_HANDLER(WM_CREATE, OnCreate)
  74.     MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
  75.     MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
  76.     MESSAGE_HANDLER(WM_PAINT, OnPaint)
  77.     MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
  78.     MESSAGE_HANDLER(WM_SIZE, OnSize)
  79.     MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
  80. END_MSG_MAP()
  81. // IViewObjectEx
  82.     STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
  83.     {
  84.         ATLTRACE(_T("IViewObjectExImpl::GetViewStatusn"));
  85.         *pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
  86.         return S_OK;
  87.     }
  88. // IOleInPlaceActiveObjectImpl
  89.     STDMETHOD(TranslateAccelerator)( LPMSG lpmsg );
  90.     STDMETHOD(OnFrameWindowActivate)( BOOL fActive );
  91. // IObjectSafety
  92.     STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions);
  93.     STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid, DWORD dwSupportedOptions, DWORD dwEnabledOptions);
  94. // IPersistPropertyBag
  95.     STDMETHOD(Load)(IPropertyBag * pPropBag, IErrorLog * pErrorLog);
  96.     STDMETHOD(Save)(IPropertyBag * pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties) {return S_OK;}
  97. public:
  98.     // Control message handlers
  99.     LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  100.     LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  101.     LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  102.     HRESULT OnDrawAdvanced(ATL_DRAWINFO& di);
  103.     LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  104.     LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  105. // IPreview
  106. public:
  107.     STDMETHOD(get_printable)(/*[out, retval]*/ BOOL *pVal);
  108.     STDMETHOD(put_printable)(/*[in]*/ BOOL newVal);
  109.     STDMETHOD(get_cxImage)(/*[out, retval]*/ long *pVal);
  110.     STDMETHOD(get_cyImage)(/*[out, retval]*/ long *pVal);
  111.     STDMETHOD(ShowFile)(BSTR bstrFileName, int iSelectCount);
  112.     STDMETHOD(Show)(VARIANT var);
  113. };
  114. #endif //__PREVCTRL_H_