Windows2003-3790/inetcore/outlookexpress/wabw/wabapi/_idrgdrp.h
2020-09-30 16:53:55 +02:00

406 lines
12 KiB
C

/****
*
*
*
* 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