|
|
/****
* * * * idrgdrp.h - drag 'n' drop for vcard files and other formats * * * Copyright (C) Microsoft Corp. 1995, 1996, 1997. ****/
#ifndef _IDRGDRP_H
#define _IDRGDRP_H
struct _IWAB_DRAGDROP; typedef struct _IWAB_DRAGDROP * LPIWABDRAGDROP;
/* IWAB_DROPTARGET ------------------------------------------------------ */ #define CBIWAB_DROPTARGET sizeof(IWAB_DROPTARGET)
#define IWAB_DROPTARGET_METHODS(IPURE) \
MAPIMETHOD(DragEnter) \ (THIS_ IDataObject * pDataObject, \ DWORD grfKeyState, \ POINTL pt, \ DWORD * pdwEffect) IPURE; \ MAPIMETHOD(DragOver) \ (THIS_ DWORD grfKeyState, \ POINTL pt, \ DWORD * pdwEffect) IPURE; \ MAPIMETHOD(DragLeave) \ (THIS) IPURE; \ MAPIMETHOD(Drop) \ (THIS_ IDataObject * pDataObject, \ DWORD grfKeyState, \ POINTL pt, \ DWORD * pdwEffect) IPURE;
/****/
#undef INTERFACE
#define INTERFACE IWAB_DropTarget
DECLARE_MAPI_INTERFACE_(IWAB_DropTarget, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWAB_DROPTARGET_METHODS(PURE) };
#undef INTERFACE
#define INTERFACE struct _IWAB_DROPTARGET
#undef METHOD_PREFIX
#define METHOD_PREFIX IWAB_DROPTARGET_
#undef LPVTBL_ELEM
#define LPVTBL_ELEM lpvtbl
#undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWAB_DROPTARGET_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DROPTARGET_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWAB_DROPTARGET_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DROPTARGET_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
DECLARE_MAPI_INTERFACE(IWAB_DROPTARGET_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DROPTARGET_METHODS(IMPL) };
typedef struct _IWAB_DROPTARGET { MAPIX_BASE_MEMBERS(IWAB_DROPTARGET)
LPIWABDRAGDROP lpIWDD;
} IWABDROPTARGET, * LPIWABDROPTARGET;
/* ----------------------------------------------------------------------------------------------*/
/* IWAB_DROPSOURCE ------------------------------------------------------ */ #define CBIWAB_DROPSOURCE sizeof(IWAB_DROPSOURCE)
#define IWAB_DROPSOURCE_METHODS(IPURE) \
MAPIMETHOD(QueryContinueDrag) \ (THIS_ BOOL fEscapePressed, \ DWORD grfKeyState) IPURE; \ MAPIMETHOD(GiveFeedback) \ (THIS_ DWORD dwEffect) IPURE;
/****/
#undef INTERFACE
#define INTERFACE IWAB_DropSource
DECLARE_MAPI_INTERFACE_(IWAB_DropSource, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWAB_DROPSOURCE_METHODS(PURE) };
#undef INTERFACE
#define INTERFACE struct _IWAB_DROPSOURCE
#undef METHOD_PREFIX
#define METHOD_PREFIX IWAB_DROPSOURCE_
#undef LPVTBL_ELEM
#define LPVTBL_ELEM lpvtbl
#undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWAB_DROPSOURCE_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DROPSOURCE_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWAB_DROPSOURCE_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DROPSOURCE_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
DECLARE_MAPI_INTERFACE(IWAB_DROPSOURCE_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DROPSOURCE_METHODS(IMPL) };
typedef struct _IWAB_DROPSOURCE { MAPIX_BASE_MEMBERS(IWAB_DROPSOURCE)
LPIWABDRAGDROP lpIWDD;
} IWABDROPSOURCE, * LPIWABDROPSOURCE;
/* ----------------------------------------------------------------------------------------------*/
/* IWAB_DRAGDROP ------------------------------------------------------ */ #define CBIWAB_DRAGDROP sizeof(IWAB_DRAGDROP)
#undef INTERFACE
#define INTERFACE IWAB_DragDrop
DECLARE_MAPI_INTERFACE_(IWAB_DragDrop, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) };
#undef INTERFACE
#define INTERFACE struct _IWAB_DRAGDROP
#undef METHOD_PREFIX
#define METHOD_PREFIX IWAB_DRAGDROP_
#undef LPVTBL_ELEM
#define LPVTBL_ELEM lpvtbl
#undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWAB_DRAGDROP_)
MAPI_IUNKNOWN_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWAB_DRAGDROP_)
MAPI_IUNKNOWN_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
DECLARE_MAPI_INTERFACE(IWAB_DRAGDROP_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) };
typedef struct _IWAB_DRAGDROP { MAPIX_BASE_MEMBERS(IWAB_DRAGDROP)
LPIWABDRAGDROP lpIWDD;
LPIWABDROPTARGET lpIWABDropTarget;
LPIWABDROPSOURCE lpIWABDropSource;
LPDATAOBJECT m_pIDataObject; DWORD m_dwEffect; CLIPFORMAT m_cfAccept; BOOL m_bIsCopyOperation; // if CTRL key is pressed
DWORD m_grfInitialKeyState; BOOL m_bSource; BOOL m_bOverTV;
LPVOID m_lpv; // data of parent window
} IWABDRAGDROP, * LPIWABDRAGDROP;
/* ----------------------------------------------------------------------------------------------*/
// Create the IDragDrop Data Object
HRESULT HrCreateIWABDragDrop(LPIWABDRAGDROP * lppIWABDragDrop);
/* ----------------------------------------------------------------------------------------------*/
/* IWAB_DATAOBJECT ------------------------------------------------------ */ #define CBIWAB_DATAOBJECT sizeof(IWAB_DATAOBJECT)
#define IWAB_DATAOBJECT_METHODS(IPURE) \
MAPIMETHOD(GetData) \ (THIS_ FORMATETC * pFormatetc, \ STGMEDIUM * pmedium) IPURE; \ MAPIMETHOD(GetDataHere) \ (THIS_ FORMATETC * pFormatetc, \ STGMEDIUM * pmedium) IPURE; \ MAPIMETHOD(QueryGetData) \ (THIS_ FORMATETC * pFormatetc) IPURE; \ MAPIMETHOD(GetCanonicalFormatEtc) \ (THIS_ FORMATETC * pFormatetcIn, \ FORMATETC * pFormatetcOut) IPURE; \ MAPIMETHOD(SetData) \ (THIS_ FORMATETC * pFormatetc, \ STGMEDIUM * pmedium, \ BOOL fRelease) IPURE; \ MAPIMETHOD(EnumFormatEtc) \ (THIS_ DWORD dwDirection, \ IEnumFORMATETC ** ppenumFormatetc) IPURE; \ MAPIMETHOD(DAdvise) \ (THIS_ FORMATETC * pFormatetc, \ DWORD advf, \ IAdviseSink * pAdvSink, \ DWORD * pdwConnection) IPURE; \ MAPIMETHOD(DUnadvise) \ (THIS_ DWORD dwConnection) IPURE; \ MAPIMETHOD(EnumDAdvise) \ (THIS_ IEnumSTATDATA ** ppenumAdvise) IPURE; \
/****/
#undef INTERFACE
#define INTERFACE IWAB_DataObject
DECLARE_MAPI_INTERFACE_(IWAB_DataObject, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWAB_DATAOBJECT_METHODS(PURE) };
#undef INTERFACE
#define INTERFACE struct _IWAB_DATAOBJECT
#undef METHOD_PREFIX
#define METHOD_PREFIX IWAB_DATAOBJECT_
#undef LPVTBL_ELEM
#define LPVTBL_ELEM lpvtbl
#undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWAB_DATAOBJECT_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DATAOBJECT_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWAB_DATAOBJECT_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DATAOBJECT_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
DECLARE_MAPI_INTERFACE(IWAB_DATAOBJECT_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWAB_DATAOBJECT_METHODS(IMPL) };
typedef struct _IWAB_DATAOBJECT { MAPIX_BASE_MEMBERS(IWAB_DATAOBJECT)
LPADRBOOK m_lpAdrBook; HWND m_hWndLV;
BOOL m_bObjectIsGroup; // TRUE when dragging a single object which is a group
ULONG cbDatahDrop; const void *pDatahDrop; ULONG cbDataTextA; const void *pDataTextA;
ULONG cbDataTextW; const void *pDataTextW;
ULONG cbDataBuffer; const void *pDataBuffer;
ULONG cbDataEID; const void *pDataEID; LPVOID m_lpv; } IWABDATAOBJECT, * LPIWABDATAOBJECT;
/* ----------------------------------------------------------------------------------------------*/
// Creates the IDataObject that holds info about the dragged and dropped object
HRESULT HrCreateIWABDataObject(LPVOID lpv, LPADRBOOK lpAdrBook, HWND hWndLV, LPIWABDATAOBJECT * lppIWABDataObject, BOOL bGetDataNow, BOOL bIsGroup);
/* ----------------------------------------------------------------------------------------------*/
/* IWAB_ENUMFORMATETC ------------------------------------------------------ */ #define CBIWAB_ENUMFORMATETC sizeof(IWAB_ENUMFORMATETC)
#define IWAB_ENUMFORMATETC_METHODS(IPURE) \
MAPIMETHOD(Next) \ (THIS_ ULONG celt, \ FORMATETC *rgelt, \ ULONG *pceltFethed) IPURE; \ MAPIMETHOD(Skip) \ (THIS_ ULONG celt) IPURE; \ MAPIMETHOD(Reset) \ (THIS) IPURE; \ MAPIMETHOD(Clone) \ (THIS_ IEnumFORMATETC ** ppenum) IPURE; \
/****/
#undef INTERFACE
#define INTERFACE IWAB_EnumFORMATETC
DECLARE_MAPI_INTERFACE_(IWAB_EnumFORMATETC, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWAB_ENUMFORMATETC_METHODS(PURE) };
#undef INTERFACE
#define INTERFACE struct _IWAB_ENUMFORMATETC
#undef METHOD_PREFIX
#define METHOD_PREFIX IWAB_ENUMFORMATETC_
#undef LPVTBL_ELEM
#define LPVTBL_ELEM lpvtbl
#undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWAB_ENUMFORMATETC_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_ENUMFORMATETC_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWAB_ENUMFORMATETC_)
MAPI_IUNKNOWN_METHODS(IMPL) IWAB_ENUMFORMATETC_METHODS(IMPL) #undef MAPIMETHOD_
#define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
DECLARE_MAPI_INTERFACE(IWAB_ENUMFORMATETC_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWAB_ENUMFORMATETC_METHODS(IMPL) };
typedef struct _IWAB_ENUMFORMATETC { MAPIX_BASE_MEMBERS(IWAB_ENUMFORMATETC)
UINT ifmt; UINT cfmt; FORMATETC afmt[1]; } IWABENUMFORMATETC, * LPIWABENUMFORMATETC;
/* ----------------------------------------------------------------------------------------------*/
HRESULT HrCreateIWABEnumFORMATETC(UINT cfmt, const FORMATETC afmt[], LPIWABENUMFORMATETC *ppenumFormatEtc);
#endif
|