Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

259 lines
9.0 KiB

/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1993-1999 Microsoft Corporation. All Rights Reserved.
//
// MODULE: dragdrop.h
//
// PURPOSE: Contains the definitions for all of Outlook Express's
// Drag Drop code.
//
#pragma once
class CStoreDlgCB;
/////////////////////////////////////////////////////////////////////////////
// Data Formats, Types, and Clipboard Formats
//
typedef struct tagOEMESSAGES {
FOLDERID idSource;
MESSAGEIDLIST rMsgIDList;
} OEMESSAGES;
/////////////////////////////////////////////////////////////////////////////
// Drop Target Class
//
class CDropTarget : public IDropTarget
{
/////////////////////////////////////////////////////////////////////////
// Constructors and Destructor
//
public:
CDropTarget();
~CDropTarget();
/////////////////////////////////////////////////////////////////////////
// Initialization
//
HRESULT Initialize(HWND hwndOwner, FOLDERID idFolder);
/////////////////////////////////////////////////////////////////////////
// IUnknown
//
STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
/////////////////////////////////////////////////////////////////////////
// IDropTarget
//
STDMETHODIMP DragEnter(IDataObject *pDataObject, DWORD grfKeyState,
POINTL pt, DWORD *pdwEffect);
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
STDMETHODIMP DragLeave(void);
STDMETHODIMP Drop(IDataObject *pDataObject, DWORD grfKeyState,
POINTL pt, DWORD *pdwEffect);
private:
/////////////////////////////////////////////////////////////////////////
// Utility Functions
//
BOOL _CheckRoundtrip(IDataObject *pDataObject);
BOOL _ValidateDropType(CLIPFORMAT cf, IDataObject *pDataObject);
DWORD _DragEffectFromFormat(IDataObject *pDataObject, DWORD dwEffectOk, CLIPFORMAT cf, DWORD grfKeyState);
HRESULT _HandleDrop(IDataObject *pDataObject, DWORD dwEffect, CLIPFORMAT cf, DWORD grfKeyState);
HRESULT _HandleFolderDrop(IDataObject *pDataObject);
HRESULT _HandleMessageDrop(IDataObject *pDataObject, BOOL fMove);
HRESULT _HandleHDrop(IDataObject *pDataObject, CLIPFORMAT cf, DWORD grfKeyState);
HRESULT _InsertMessagesInStore(HDROP hDrop);
HRESULT _CreateMessageFromDrop(HWND hwnd, IDataObject *pDataObject, DWORD grfKeyState);
BOOL _IsValidOEFolder(IDataObject *pDataObject);
BOOL _IsValidOEMessages(IDataObject *pDataObject);
/////////////////////////////////////////////////////////////////////////
// Progress Dialog
static INT_PTR CALLBACK _ProgDlgProcExt(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK _ProgDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL _OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
void _OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
void _SaveNextMessage(void);
private:
/////////////////////////////////////////////////////////////////////////
// Object Data
//
ULONG m_cRef;
HWND m_hwndOwner;
FOLDERID m_idFolder;
IDataObject *m_pDataObject;
CLIPFORMAT m_cf;
BOOL m_fOutbox;
// Progress Dialog Stuff
HWND m_hwndDlg;
HDROP m_hDrop;
DWORD m_cFiles;
DWORD m_iFileCur;
IMessageFolder *m_pFolder;
CStoreDlgCB *m_pStoreCB;
};
/////////////////////////////////////////////////////////////////////////////
// Data Object Classes
//
class CBaseDataObject : public IDataObject
{
public:
/////////////////////////////////////////////////////////////////////////
// Constructor and Destructor
//
CBaseDataObject();
virtual ~CBaseDataObject();
/////////////////////////////////////////////////////////////////////////
// IUnknown Interface
//
STDMETHODIMP QueryInterface(REFIID riid, LPVOID* ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
/////////////////////////////////////////////////////////////////////////
// IDataObject Interface members
//
STDMETHODIMP GetData(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium) = 0;
STDMETHODIMP GetDataHere(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
STDMETHODIMP QueryGetData(LPFORMATETC pFE) = 0;
STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC pFEIn, LPFORMATETC pFEOut);
STDMETHODIMP SetData(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium,
BOOL fRelease);
STDMETHODIMP EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC** ppEnum);
STDMETHODIMP DAdvise(LPFORMATETC pFE, DWORD advf,
IAdviseSink* ppAdviseSink, LPDWORD pdwConnection);
STDMETHODIMP DUnadvise(DWORD dwConnection);
STDMETHODIMP EnumDAdvise(IEnumSTATDATA** ppEnumAdvise);
/////////////////////////////////////////////////////////////////////////
// Utility Functions
//
protected:
virtual HRESULT _BuildFormatEtc(LPFORMATETC *ppFE, ULONG *pcElt) = 0;
/////////////////////////////////////////////////////////////////////////
// Object Attributes
//
private:
ULONG m_cRef; // Object reference count
protected:
FORMATETC m_rgFormatEtc[10]; // Array of FORMATETC's we support
ULONG m_cFormatEtc; // Number of elements in m_rgFormatEtc
};
class CFolderDataObject : public CBaseDataObject
{
public:
/////////////////////////////////////////////////////////////////////////
// Constructor and Destructor
//
CFolderDataObject(FOLDERID idFolder) : m_idFolder(idFolder), m_fBuildFE(0) {};
~CFolderDataObject() {};
/////////////////////////////////////////////////////////////////////////
// IDataObject - Overridden from CBaseDataObject2
//
STDMETHODIMP GetData(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
STDMETHODIMP QueryGetData(LPFORMATETC pFE);
/////////////////////////////////////////////////////////////////////////
// Utility Functions
//
protected:
HRESULT _BuildFormatEtc(LPFORMATETC *ppFE, ULONG *pcElt);
HRESULT _RenderOEFolder(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
HRESULT _RenderTextOrShellURL(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
/////////////////////////////////////////////////////////////////////////
// Object Attributes
//
private:
FOLDERID m_idFolder;
BOOL m_fBuildFE;
};
class CMessageDataObject : public CBaseDataObject
{
public:
/////////////////////////////////////////////////////////////////////////
// Constructor and Destructor
//
CMessageDataObject();
~CMessageDataObject();
HRESULT Initialize(LPMESSAGEIDLIST pMsgs, FOLDERID idSource);
/////////////////////////////////////////////////////////////////////////
// IDataObject - Overridden from CBaseDataObject2
//
STDMETHODIMP GetData(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
STDMETHODIMP QueryGetData(LPFORMATETC pFE);
/////////////////////////////////////////////////////////////////////////
// Utility Functions
//
protected:
HRESULT _BuildFormatEtc(LPFORMATETC *ppFE, ULONG *pcElt);
HRESULT _LoadMessage(DWORD iMsg, IMimeMessage **ppMsg, LPWSTR pwszFileExt);
HRESULT _RenderOEMessages(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
HRESULT _RenderFileContents(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
HRESULT _RenderFileGroupDescriptor(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
/////////////////////////////////////////////////////////////////////////
// Object Attributes
//
private:
LPMESSAGEIDLIST m_pMsgIDList;
FOLDERID m_idSource;
BOOL m_fBuildFE;
BOOL m_fDownloaded;
};
class CShortcutDataObject : public CBaseDataObject
{
public:
/////////////////////////////////////////////////////////////////////////
// Constructor and Destructor
//
CShortcutDataObject(UINT iPos) : m_iPos(iPos), m_fBuildFE(0) {};
~CShortcutDataObject() {};
/////////////////////////////////////////////////////////////////////////
// IDataObject - Overridden from CBaseDataObject2
//
STDMETHODIMP GetData(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
STDMETHODIMP QueryGetData(LPFORMATETC pFE);
/////////////////////////////////////////////////////////////////////////
// Utility Functions
//
private:
HRESULT _BuildFormatEtc(LPFORMATETC *ppFE, ULONG *pcElt);
HRESULT _RenderOEShortcut(LPFORMATETC pFE, LPSTGMEDIUM pStgMedium);
/////////////////////////////////////////////////////////////////////////
// Object Attributes
//
private:
UINT m_iPos;
BOOL m_fBuildFE;
};