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

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef __DATETIMEPICKEROC_H__
  2. #define __DATETIMEPICKEROC_H__
  3. #include "unicpp/stdafx.h"
  4. #include <mshtmdid.h>
  5. #include <mshtml.h>
  6. #include "atldisp.h"
  7. #define DTPICKER_WINDOWCLASS          TEXT("Date Time Picker ActiveX Control Window")
  8. #define DTPICKER_CONTROL_ID           0x00929ba6
  9. class CDateTimePickerOC;
  10. class ATL_NO_VTABLE CDateTimePickerOC
  11.                     : public CComObjectRootEx<CComSingleThreadModel>
  12.                     , public CComCoClass<CDateTimePickerOC, &CLSID_DateTimePickerOC>
  13.                     , public CComControl<CDateTimePickerOC>
  14.                     , public IDispatchImpl<IDateTimePickerOC, &IID_IDateTimePickerOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>
  15.                     , public IProvideClassInfo2Impl<&CLSID_DateTimePickerOC, NULL, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>
  16.                     , public IPersistImpl<CDateTimePickerOC>
  17.                     , public IOleControlImpl<CDateTimePickerOC>
  18.                     , public IViewObjectExImpl<CDateTimePickerOC>
  19.                     , public IOleInPlaceActiveObjectImpl<CDateTimePickerOC>
  20.                     , public IObjectSafetyImpl<CDateTimePickerOC>
  21.                     , public IPersistPropertyBagImpl<CDateTimePickerOC>
  22.                     , public IQuickActivateImpl<CDateTimePickerOC>
  23.                     , public IOleInPlaceObject
  24.                     , public CShell32AtlIDispatch<CDateTimePickerOC, &CLSID_DateTimePickerOC, &IID_IDateTimePickerOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>
  25. {
  26. public:
  27.     CDateTimePickerOC();
  28.     ~CDateTimePickerOC();
  29.     DECLARE_POLY_AGGREGATABLE(CDateTimePickerOC);
  30.     DECLARE_NO_REGISTRY();
  31.     DECLARE_WND_CLASS(DTPICKER_WINDOWCLASS)
  32. BEGIN_COM_MAP(CDateTimePickerOC)
  33.     // ATL Uses these in IUnknown::QueryInterface()
  34.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  35.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  36.     COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  37.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceActiveObject)
  38.     COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  39.     COM_INTERFACE_ENTRY(IOleInPlaceObject)
  40.     COM_INTERFACE_ENTRY(IDispatch)
  41.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  42.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  43.     COM_INTERFACE_ENTRY_IMPL(IOleControl)
  44.     COM_INTERFACE_ENTRY_IMPL(IOleObject)
  45.     COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
  46.     COM_INTERFACE_ENTRY(IDateTimePickerOC)
  47.     COM_INTERFACE_ENTRY_IMPL(IPersist)
  48.     COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag)
  49.     COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
  50. END_COM_MAP()
  51. BEGIN_MSG_MAP(CDateTimePickerOC)
  52.     MESSAGE_HANDLER(WM_SIZE, _OnSetSize) 
  53.     MESSAGE_HANDLER(WM_SETFOCUS, _OnSetFocusControl)
  54.     // REVIEW: How many of the following message handlers are TRUELY needed?  All?  None?  Some?
  55.     MESSAGE_HANDLER(WM_KEYDOWN, _ForwardMessage) 
  56.     MESSAGE_HANDLER(WM_SYSKEYDOWN, _ForwardMessage) 
  57.     MESSAGE_HANDLER(WM_CHAR, _ForwardMessage) 
  58.     MESSAGE_HANDLER(WM_KILLFOCUS, _ForwardMessage) 
  59. END_MSG_MAP()
  60. BEGIN_PROPERTY_MAP(CDateTimePickerOC)
  61. END_PROPERTY_MAP()
  62.     // *** IDateTimePickerOC ***
  63.     virtual STDMETHODIMP get_DateTime(OUT DATE * pdatetime);
  64.     virtual STDMETHODIMP put_DateTime(IN DATE datetime);
  65.     virtual STDMETHODIMP get_Enabled(OUT VARIANT_BOOL * pfEnabled);
  66.     virtual STDMETHODIMP put_Enabled(IN VARIANT_BOOL fEnabled);
  67.     virtual STDMETHODIMP STDMETHODCALLTYPE Reset(VARIANT vDelta);
  68.     // *** IOleWindow ***
  69.     virtual STDMETHODIMP GetWindow(HWND * lphwnd) {return IOleInPlaceActiveObjectImpl<CDateTimePickerOC>::GetWindow(lphwnd);};
  70.     virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) { return IOleInPlaceActiveObjectImpl<CDateTimePickerOC>::ContextSensitiveHelp(fEnterMode); };
  71.     // *** IOleInPlaceObject ***
  72.     virtual STDMETHODIMP InPlaceDeactivate(void) {return IOleInPlaceObject_InPlaceDeactivate();};
  73.     virtual STDMETHODIMP UIDeactivate(void) { return IOleInPlaceObject_UIDeactivate(); };
  74.     virtual STDMETHODIMP SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect) {return IOleInPlaceObject_SetObjectRects(lprcPosRect, lprcClipRect);};
  75.     virtual STDMETHODIMP ReactivateAndUndo(void)  { return E_NOTIMPL; };
  76.     // *** IPersistPropertyBag ***
  77.     virtual STDMETHODIMP Load(IPropertyBag * pPropBag, IErrorLog * pErrorLog);
  78.     virtual STDMETHODIMP Save(IPropertyBag * pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties) {return S_OK;};
  79.     // *** IObjectSafety ***
  80.     virtual STDMETHODIMP SetInterfaceSafetyOptions(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions) {return S_OK;};
  81.     // *** IOleInPlaceActiveObject ***
  82.     virtual STDMETHODIMP TranslateAccelerator(MSG *pMsg) { return CShell32AtlIDispatch<CDateTimePickerOC, &CLSID_DateTimePickerOC, &IID_IDateTimePickerOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>::TranslateAcceleratorPriv(this, pMsg, m_spClientSite); };
  83.     // Over ride ATL functions.
  84.     LRESULT _ForwardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
  85.     LRESULT _OnSetSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
  86.     HWND Create(HWND hWndParent, RECT& rcPos, LPCTSTR pszWindowName = NULL, DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, DWORD dwExStyle = 0, UINT_PTR nID = 0);
  87.     virtual HRESULT TranslateAcceleratorInternal(MSG *pMsg, IOleClientSite * pocs) { return E_NOTIMPL; };
  88.     LRESULT _OnSetFocusControl(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
  89.     LRESULT _OnSetFocusDatePicker(UINT uMsg, WPARAM wParam, LPARAM lParam);
  90.     HRESULT DoVerbUIActivate(LPCRECT prcPosRect, HWND hwndParent) { return CShell32AtlIDispatch<CDateTimePickerOC, &CLSID_DateTimePickerOC, &IID_IDateTimePickerOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>::DoVerbUIActivate(prcPosRect, hwndParent, _hwndDTPicker); };
  91.     static LRESULT CALLBACK SubClassWndProc(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam, WPARAM uIdSubclass, ULONG_PTR dwRefData);
  92.     virtual STDMETHODIMP PrivateQI(REFIID iid, void ** ppvObject) { return _InternalQueryInterface(iid, ppvObject);};
  93. protected:
  94.     // Helper functions;
  95.     HWND                _hwndDTPicker;               // HWND of comctl32.dll DateTime Picker control
  96.     VARIANT_BOOL        _fEnabled;                   // Is the control enabled (not grayed out)?
  97.     SYSTEMTIME          _st;                         // The system time to initialize to...
  98. };
  99. #endif // __DATETIMEPICKEROC_H__