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

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef __FILEASSOCNAMESPACEOC_H__
  2. #define __FILEASSOCNAMESPACEOC_H__
  3. #include "unicpp/stdafx.h"
  4. #include <mshtmdid.h>
  5. #include <mshtml.h>
  6. #include "atldisp.h"
  7. #include "combooc.h"
  8. #include "ids.h"
  9. class CFileAssocNameSpaceOC;
  10. #define FILEASSOCIATIONSID_FILE_PATH             1   // Go parse it.
  11. #define FILEASSOCIATIONS_WINDOWCLASS          TEXT("ActiveX Control ComboBoxEx of File Associations")
  12. //-------------------------------------------------------------------------//
  13. //  class CFileAssocNameSpaceOC
  14. //
  15. //  Note: derivation from CShell32AtlIDispatch<> instead of IOleObjectImpl<> is
  16. //  necessary when this object resides in shell32.dll
  17. class ATL_NO_VTABLE CFileAssocNameSpaceOC
  18.                     : public CComObjectRootEx<CComSingleThreadModel>
  19.                     , public CComCoClass<CFileAssocNameSpaceOC, &CLSID_FileAssocNameSpaceOC>
  20.                     , public CComControl<CFileAssocNameSpaceOC>
  21.                     , public IDispatchImpl<IComboBoxExOC, &IID_IComboBoxExOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>
  22.                     , public IProvideClassInfo2Impl<&CLSID_FileAssocNameSpaceOC, NULL, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>
  23.                     , public IPersistImpl<CFileAssocNameSpaceOC>
  24.                     , public IOleControlImpl<CFileAssocNameSpaceOC>
  25.                     , public IViewObjectExImpl<CFileAssocNameSpaceOC>
  26.                     , public IOleInPlaceActiveObjectImpl<CFileAssocNameSpaceOC>
  27.                     , public IObjectSafetyImpl<CFileAssocNameSpaceOC>
  28.                     , public IConnectionPointContainerImpl<CFileAssocNameSpaceOC>
  29.                     , public IPersistPropertyBagImpl<CFileAssocNameSpaceOC>
  30.                     , public IQuickActivateImpl<CFileAssocNameSpaceOC>
  31.                     , public IOleInPlaceObject
  32.                     , public CProxy_ComboBoxExEvents<CFileAssocNameSpaceOC>
  33.                     , public CShell32AtlIDispatch<CFileAssocNameSpaceOC, &CLSID_FileAssocNameSpaceOC, &IID_IComboBoxExOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>
  34.                     , public CComboBoxExOC
  35. {
  36. public:
  37.     CFileAssocNameSpaceOC();
  38.     virtual ~CFileAssocNameSpaceOC();
  39.     DECLARE_POLY_AGGREGATABLE(CFileAssocNameSpaceOC);
  40.     DECLARE_NO_REGISTRY();
  41.     DECLARE_WND_CLASS(FILEASSOCIATIONS_WINDOWCLASS)
  42. BEGIN_COM_MAP(CFileAssocNameSpaceOC)
  43.     // ATL Uses these in IUnknown::QueryInterface()
  44.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  45.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  46.     COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  47.     COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceActiveObject)
  48.     COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  49.     COM_INTERFACE_ENTRY(IOleInPlaceObject)
  50.     COM_INTERFACE_ENTRY(IDispatch)
  51.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  52.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  53.     COM_INTERFACE_ENTRY_IMPL(IOleControl)
  54.     COM_INTERFACE_ENTRY_IMPL(IOleObject)
  55.     COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
  56.     COM_INTERFACE_ENTRY(IComboBoxExOC)
  57.     COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  58.     COM_INTERFACE_ENTRY_IMPL(IPersist)
  59.     COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag)
  60.     COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
  61. END_COM_MAP()
  62. BEGIN_CONNECTION_POINT_MAP(CFileAssocNameSpaceOC)
  63.     // ATL Uses these to implement the Connection point code
  64.     CONNECTION_POINT_ENTRY(DIID_DComboBoxExEvents)
  65. END_CONNECTION_POINT_MAP()
  66. BEGIN_MSG_MAP(CFileAssocNameSpaceOC)
  67.     MESSAGE_HANDLER(WM_SIZE, _ForwardMessage) 
  68.     MESSAGE_HANDLER(WM_SETFOCUS, _OnFocus) 
  69.     COMMAND_HANDLER(FCIDM_VIEWADDRESS, CBN_DROPDOWN, _OnDropDownMessage) 
  70.     NOTIFY_HANDLER(FCIDM_VIEWADDRESS, CBEN_DELETEITEM, _OnDeleteItemMessage) 
  71. END_MSG_MAP()
  72.  
  73. BEGIN_PROPERTY_MAP(CFileAssocNameSpaceOC)
  74. END_PROPERTY_MAP()
  75.     // *** IComboBoxExOC ***
  76.     virtual STDMETHODIMP get_String(OUT BSTR *pbs);
  77.     virtual STDMETHODIMP put_String(IN BSTR bs);
  78.     virtual STDMETHODIMP get_Enabled(OUT VARIANT_BOOL * pfEnabled) {return CComboBoxExOC::get_Enabled(pfEnabled);};
  79.     virtual STDMETHODIMP put_Enabled(IN VARIANT_BOOL fEnabled) {return CComboBoxExOC::put_Enabled(fEnabled);};
  80.     virtual STDMETHODIMP Reset(void);
  81.     // *** IOleWindow ***
  82.     virtual STDMETHODIMP GetWindow(HWND * lphwnd) {return IOleInPlaceActiveObjectImpl<CFileAssocNameSpaceOC>::GetWindow(lphwnd);};
  83.     virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) { return IOleInPlaceActiveObjectImpl<CFileAssocNameSpaceOC>::ContextSensitiveHelp(fEnterMode); };
  84.     // *** IOleInPlaceObject ***
  85.     virtual STDMETHODIMP InPlaceDeactivate(void) {return IOleInPlaceObject_InPlaceDeactivate();};
  86.     virtual STDMETHODIMP UIDeactivate(void) { return IOleInPlaceObject_UIDeactivate(); };
  87.     virtual STDMETHODIMP SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect) {return IOleInPlaceObject_SetObjectRects(lprcPosRect, lprcClipRect);};
  88.     virtual STDMETHODIMP ReactivateAndUndo(void)  { return E_NOTIMPL; };
  89.     // *** IPersistPropertyBag ***
  90.     virtual STDMETHODIMP Load(IPropertyBag * pPropBag, IErrorLog * pErrorLog);
  91.     virtual STDMETHODIMP Save(IPropertyBag * pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties) {return S_OK;};
  92.     // *** IObjectSafety ***
  93.     virtual STDMETHODIMP SetInterfaceSafetyOptions(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions) {return S_OK;};
  94.     // *** IOleInPlaceActiveObject ***
  95.     virtual STDMETHODIMP TranslateAccelerator(MSG *pMsg) { return CShell32AtlIDispatch<CFileAssocNameSpaceOC, &CLSID_FileAssocNameSpaceOC, &IID_IComboBoxExOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>::TranslateAcceleratorPriv(this, pMsg, m_spClientSite); };
  96.     // Over ride ATL functions.
  97.     LRESULT _ForwardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled) { return CComboBoxExOC::cb_ForwardMessage(uMsg, wParam, lParam, bHandled); };
  98.     LRESULT _OnDropDownMessage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL & bHandled) { return CComboBoxExOC::cb_OnDropDownMessage(wNotifyCode, wID, hWndCtl, bHandled); };
  99.     LRESULT _OnDeleteItemMessage(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  100.     HWND Create(HWND hWndParent, RECT& rcPos, LPCTSTR pszWindowName = NULL, DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, DWORD dwExStyle = 0, UINT_PTR nID = 0);
  101.     HWND _Create(HWND hWndParent, RECT& rcPos, LPCTSTR pszWindowName, DWORD dwStyle, DWORD dwExStyle, UINT_PTR nID) { return CWindowImpl<CFileAssocNameSpaceOC>::Create(hWndParent, rcPos, pszWindowName, dwStyle, dwExStyle, nID); };
  102.     LRESULT _OnFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
  103.     HRESULT DoVerbUIActivate(LPCRECT prcPosRect, HWND hwndParent) { return CShell32AtlIDispatch<CFileAssocNameSpaceOC, &CLSID_FileAssocNameSpaceOC, &IID_IComboBoxExOC, &LIBID_Shell32, 1, 0, CComTypeInfoHolder>::DoVerbUIActivate(prcPosRect, hwndParent, _hwndComboBox); };
  104.     static LRESULT CALLBACK SubClassWndProc(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam, WPARAM uIdSubclass, ULONG_PTR dwRefData);
  105.     virtual STDMETHODIMP PrivateQI(REFIID iid, void ** ppvObject) { return _InternalQueryInterface(iid, ppvObject);};
  106.     HRESULT IOleInPlaceObject_InPlaceDeactivate(void);  // Use this time to persist state.
  107. protected:
  108.     // Helper functions;
  109.     BOOL _IsSecure(void) { return TRUE; };      // We are safe because extensions are beign.
  110.     HRESULT _AddDefaultItem(void)   { ASSERT(0); return E_NOTIMPL; };      // Should never get hit.
  111.     virtual HRESULT _PopulateTopItem(void);
  112.     virtual HRESULT _Populate(void);
  113.     void Fire_EnterPressed(void) {CProxy_ComboBoxExEvents<CFileAssocNameSpaceOC>::Fire_EnterPressed();};
  114.     HRESULT _CustomizeName(UINT idString, LPTSTR szDisplayName, DWORD dwSize) { return S_OK; };
  115.     HRESULT _GetSelectText(LPTSTR pszSelectText, DWORD cchSize, BOOL fDisplayName);
  116.     HRESULT _IsDefaultSelection(LPCTSTR pszLastSelection);
  117.     HRESULT _RestoreIfUserInputValue(LPCTSTR pszLastSelection);
  118.     // Private Member Variables
  119.     BITBOOL             _fPopulated : 1;            // Have we populated yet?
  120. };
  121. #endif // __FILEASSOCNAMESPACEOC_H__