DropHandler.h
上传用户:hy_wanghao
上传日期:2007-01-08
资源大小:279k
文件大小:3k
源码类别:

Shell编程

开发平台:

Visual C++

  1. #if !defined(AFX_DROPHANDLER_H__20010326_81A7_8573_71AC_0080AD509054__INCLUDED_)
  2. #define AFX_DROPHANDLER_H__20010326_81A7_8573_71AC_0080AD509054__INCLUDED_
  3. #pragma once
  4. #include "DropTargetImpl.h"
  5. /////////////////////////////////////////////////////////////////////////////
  6. // CDropHandler
  7. // We need a DropHandler Shell Extension to handle drops on the root
  8. // folder (or the ADF file itself) in Windows2000.
  9. //
  10. // A DropHandler Shell extension is a COM object, which supports
  11. // IDropTarget and IPersistFile. We reuse the implmentation
  12. // of the IDropTarget from the internal drag'n'drop stuff.
  13. class ATL_NO_VTABLE CDropHandler :
  14.    public CComObjectRootEx<CComSingleThreadModel>,
  15.    public CComCoClass<CDropHandler, &CLSID_DropHandler>,
  16.    public IPersistFile,
  17.    public IDropTargetImpl
  18. {
  19. public:
  20. DECLARE_PROTECT_FINAL_CONSTRUCT()
  21. BEGIN_COM_MAP(CDropHandler) 
  22.    COM_INTERFACE_ENTRY_IID(IID_IDropTarget,IDropTarget)
  23.    COM_INTERFACE_ENTRY_IID(IID_IPersistFile,IPersistFile)
  24. END_COM_MAP()
  25. // CDropHandler
  26. public:
  27.    static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
  28.    {
  29.       CComBSTR bstrCLSID(CLSID_DropHandler);
  30.       CComBSTR bstrDescription;
  31.       CComBSTR bstrProject;
  32.       bstrDescription.LoadString(IDS_DESCRIPTION);
  33.       bstrProject.LoadString(IDS_PROJNAME);
  34.       _ATL_REGMAP_ENTRY rm[] = { 
  35.          { OLESTR("CLSID"), bstrCLSID },
  36.          { OLESTR("PROJECTNAME"), bstrProject },
  37.          { OLESTR("DESCRIPTION"), bstrDescription },
  38.          { NULL,NULL } };
  39.       return _Module.UpdateRegistryFromResource(IDR_DROPHANDLER, bRegister, rm);
  40.    }
  41.    HRESULT FinalConstruct()
  42.    {
  43.       HRESULT Hr;
  44.       CComObject<CFolder> *pFolder;
  45.       HR( CComObject<CFolder>::CreateInstance(&pFolder) );
  46.       // Initialize the IDropTarget code.
  47.       // The _Init() call will do AddRef() and Release() on the CFolder.
  48.       // The CFolder object will be initialized in the IPersistFile::Load() method
  49.       // called by the Shell later.
  50.       return _Init(pFolder, NULL);
  51.    }
  52.    // IPersist
  53.    STDMETHOD(GetClassID)(CLSID *pCLSID)
  54.    {
  55.       VALIDATE_POINTER(pCLSID);
  56.       *pCLSID = CLSID_DropHandler;
  57.       return S_OK;
  58.    }
  59.    // IPersistFile
  60.    STDMETHOD(IsDirty)(void)
  61.    {
  62.       ATLTRACENOTIMPL(_T("CDropHandler::IsDirty"));
  63.    }
  64.    
  65.    STDMETHOD(Load)(LPCOLESTR pwstrFileName, DWORD /*dwMode*/)
  66.    {
  67.       ATLASSERT(m_pFolder);
  68.       CPidl pidl;
  69.       pidl.Attach( ShellGetFileNamePidl(const_cast<LPOLESTR>(pwstrFileName)) );
  70.       return m_pFolder->Initialize(pidl);
  71.    }
  72.    STDMETHOD(Save)(LPCOLESTR, BOOL)
  73.    {
  74.       ATLTRACENOTIMPL(_T("CDropHandler::Save"));
  75.    }
  76.    
  77.    STDMETHOD(SaveCompleted)(LPCOLESTR)
  78.    {
  79.       ATLTRACENOTIMPL(_T("CDropHandler::SaveCompleted"));
  80.    }
  81.    
  82.    STDMETHOD(GetCurFile)(LPOLESTR *)
  83.    {
  84.       ATLTRACENOTIMPL(_T("CDropHandler::GetCurFile"));
  85.    }
  86.    
  87. };
  88. #endif // !defined(AFX_DROPHANDLER_H__20010326_81A7_8573_71AC_0080AD509054__INCLUDED_)