mirror of https://github.com/lianthony/NT4.0
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.
177 lines
8.6 KiB
177 lines
8.6 KiB
#define DTID_DSHIDA 0x00000200L
|
|
#define DTID_DSHDROP 0x00000400L
|
|
|
|
|
|
|
|
//===========================================================================
|
|
// CDS_IDLDropTarget: class definition
|
|
//===========================================================================
|
|
|
|
typedef struct _CDS_IDLDropTarget // idldt
|
|
{
|
|
#ifdef __cplusplus
|
|
//BUGBUG not legal to instantiate abstract base class
|
|
//it's only here for the vtable pointer anyway...(fmh)
|
|
LPVOID dropt;
|
|
#else
|
|
IDropTarget dropt;
|
|
#endif
|
|
int cRef;
|
|
LPITEMIDLIST pidl; // IDList to the target folder
|
|
HWND hwndOwner;
|
|
DWORD grfKeyStateLast; // for previous DragOver/Enter
|
|
IDataObject * pdtobj;
|
|
DWORD dwEffectLastReturned; // stashed effect that's returned by base class's dragover
|
|
LPDROPTARGET pdtgAgr; // aggregate drop target
|
|
DWORD dwData; // DTID_*
|
|
} CDS_IDLDropTarget, * LPDS_IDLDROPTARGET;
|
|
|
|
//===========================================================================
|
|
// CIDLDropTarget: member function prototypes
|
|
//===========================================================================
|
|
|
|
STDMETHODIMP CDS_IDLDropTarget_QueryInterface(LPDROPTARGET pdropt, REFIID riid, LPVOID * ppvObj);
|
|
STDMETHODIMP_(ULONG) CDS_IDLDropTarget_AddRef(LPDROPTARGET pdropt);
|
|
STDMETHODIMP_(ULONG) CDS_IDLDropTarget_Release(LPDROPTARGET pdropt);
|
|
STDMETHODIMP CDS_IDLDropTarget_DragEnter(LPDROPTARGET pdropt, LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect);
|
|
STDMETHODIMP CDS_IDLDropTarget_DragOver(LPDROPTARGET pdropt, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect);
|
|
STDMETHODIMP CDS_IDLDropTarget_DragLeave(LPDROPTARGET pdropt);
|
|
STDMETHODIMP CDS_IDLDropTarget_Drop(LPDROPTARGET pdropt, LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect);
|
|
//
|
|
// This macro checks if pdtgt is a subclass of CDS_IDLDropTarget.
|
|
// (HACK: We assume nobody overrides QueryInterface).
|
|
//
|
|
#define ISDS_IDLDROPTARGET(pdtgt) (pdtgt->lpVtbl->QueryInterface == CDS_IDLDropTarget_QueryInterface)
|
|
|
|
//===========================================================================
|
|
// CDS_IDLDropTarget: constructor prototype
|
|
//===========================================================================
|
|
#ifdef __cplusplus
|
|
//BUGBUG IDropTargetVtbl doesn't get defined in c++, make it LPVOID for now
|
|
typedef LPVOID IDropTargetVtbl;
|
|
#endif
|
|
HRESULT CDS_IDLDropTarget_Create(HWND hwndOwner, IDropTargetVtbl * lpVtbl, LPCITEMIDLIST pidl, LPDROPTARGET * ppdropt);
|
|
HRESULT CDS_IDLDropTarget_CreateFromPidl(HWND hwnd, LPITEMIDLIST pidl, LPDROPTARGET * ppvOut);
|
|
|
|
//===========================================================================
|
|
// CDS_IDLData : Member function prototypes
|
|
//===========================================================================
|
|
HRESULT STDMETHODCALLTYPE CDS_IDLData_QueryInterface(LPDATAOBJECT pdtobj, REFIID riid, LPVOID * ppvObj);
|
|
STDMETHODIMP_(ULONG) CDS_IDLData_AddRef(LPDATAOBJECT pdtobj);
|
|
STDMETHODIMP_(ULONG) CDS_IDLData_Release(LPDATAOBJECT pdtobj);
|
|
STDMETHODIMP CDS_IDLData_GetData(LPDATAOBJECT pdtobj, LPFORMATETC pformatetcIn, LPSTGMEDIUM pmedium );
|
|
STDMETHODIMP CDS_IDLData_GetDataHere(LPDATAOBJECT pdtobj, LPFORMATETC pformatetc, LPSTGMEDIUM pmedium );
|
|
STDMETHODIMP CDS_IDLData_QueryGetData(LPDATAOBJECT pdtobj, LPFORMATETC pformatetc);
|
|
STDMETHODIMP CDS_IDLData_GetCanonicalFormatEtc(LPDATAOBJECT pdtobj, LPFORMATETC pformatetc, LPFORMATETC pformatetcOut);
|
|
STDMETHODIMP CDS_IDLData_SetData(LPDATAOBJECT pdtobj, LPFORMATETC pformatetc, STGMEDIUM * pmedium, BOOL fRelease);
|
|
STDMETHODIMP CDS_IDLData_EnumFormatEtc(LPDATAOBJECT pdtobj, DWORD dwDirection, LPENUMFORMATETC * ppenumFormatEtc);
|
|
STDMETHODIMP CDS_IDLData_Advise(LPDATAOBJECT pdtobj, FORMATETC * pFormatetc, DWORD advf, LPADVISESINK pAdvSink, DWORD * pdwConnection);
|
|
STDMETHODIMP CDS_IDLData_Unadvise(LPDATAOBJECT pdtobj, DWORD dwConnection);
|
|
STDMETHODIMP CDS_IDLData_EnumAdvise(LPDATAOBJECT pdtobj, LPENUMSTATDATA * ppenumAdvise);
|
|
HRESULT CDS_IDLData_GetHDrop(IDataObject *pdtobj,
|
|
STGMEDIUM *pmedium, BOOL fAltName);
|
|
|
|
//===========================================================================
|
|
// CDS_IDLData : Constructor for subclasses
|
|
//===========================================================================
|
|
|
|
HRESULT CDS_IDLData_CreateInstance(IDataObjectVtbl *lpVtbl, IDataObject **ppdtobj, LPDATAOBJECT pdtInner);
|
|
HRESULT CDS_IDLData_CreateFromIDArray2(IDataObjectVtbl * lpVtbl, LPCITEMIDLIST pidlFolder,
|
|
UINT cidl, LPCITEMIDLIST apidl[], IDataObject * * ppdtobj);
|
|
HRESULT CDS_IDLData_CreateFromIDArray3(IDataObjectVtbl * lpVtbl, LPCITEMIDLIST pidlFolder,
|
|
UINT cidl, LPCITEMIDLIST apidl[],
|
|
LPDATAOBJECT pdtInner, IDataObject * * ppdtobj);
|
|
|
|
//===========================================================================
|
|
// CDS_IDLDropTarget : Drag & Drop helper
|
|
//===========================================================================
|
|
HRESULT CDS_IDLDropTarget_DragDropMenu(LPIDLDROPTARGET _this,
|
|
DWORD dwDefaultEffect,
|
|
IDataObject * pdtobj,
|
|
POINTL pt, LPDWORD pdwEffect,
|
|
HKEY hkeyProgID, HKEY hkeyBase,
|
|
UINT idMenu, DWORD grfKeyState);
|
|
|
|
HRESULT CDS_IDLDropTarget_DragDropMenuEx(LPIDLDROPTARGET _this,
|
|
LPDRAGDROPMENUPARAM pddm);
|
|
|
|
// object class supports IObjectLifecycle
|
|
#define SHCF_SUPPORTS_IOBJLIFE 0x20000000
|
|
|
|
HRESULT FSDS_CreateFSIDArray(LPCITEMIDLIST pidlFolder, UINT cidl,
|
|
LPCITEMIDLIST * apidl,
|
|
LPDATAOBJECT pdtInner,
|
|
LPDATAOBJECT * pdtobjOut);
|
|
|
|
extern IDropTargetVtbl cDS_IDLDropTargetVtbl;
|
|
|
|
extern UINT g_acfDS_IDLData[];
|
|
#define CF_DSHDROP 0
|
|
#define ICFDSHIDA 1
|
|
#define ICFDSOFFSETS 2
|
|
#define ICF_DSMAX 5
|
|
|
|
#define g_cfDS_HDROP g_acfDS_IDLData[CF_DSHDROP]
|
|
#define g_cfDS_HIDA g_acfDS_IDLData[ICFDSHIDA]
|
|
#define g_cfDS_OFFSETS g_acfDS_IDLData[ICFDSOFFSETS]
|
|
|
|
|
|
BOOL CDS_IDLData_IsOurs(LPDATAOBJECT pdtobj);
|
|
void FS_MoveSelectIcons(LPFSTHREADPARAM pfsthp,
|
|
LPVOID hNameMappings,
|
|
LPCTSTR pszFiles,
|
|
BOOL fMove);
|
|
LPIDA DataObj_GetDS_HIDA(LPDATAOBJECT pdtobj,
|
|
STGMEDIUM *pmedium);
|
|
void DSDataObj_EnableHDROP(LPDATAOBJECT pdtobj);
|
|
BOOL FSILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
|
|
|
|
|
|
HRESULT DoDSMoveOrCopy(DWORD dwEffect,
|
|
LPCTSTR szTargetDir,
|
|
LPTSTR pFileList);
|
|
|
|
HRESULT DoDSRename(LPTSTR szDir,
|
|
LPTSTR szOldName,
|
|
LPTSTR szNewName);
|
|
|
|
void _DSTransferDelete(HWND hwnd,
|
|
HDROP hDrop,
|
|
LPCTSTR szDir,
|
|
UINT fOptions);
|
|
|
|
HRESULT DSDoDelete(LPCTSTR szTargetDir, LPTSTR pFileList);
|
|
|
|
extern void WINAPI DS_IDLData_InitializeClipboardFormats(void);
|
|
|
|
extern BOOL _TrackPopupMenu(HMENU hmenu, UINT wFlags, int x, int y,
|
|
int wReserved, HWND hwndOwner, LPCRECT lprc);
|
|
|
|
extern void WINAPI IDLData_InitializeClipboardFormats(void);
|
|
|
|
extern STDMETHODIMP CFSIDLDropTarget_DragEnter(IDropTarget *pdropt,
|
|
IDataObject *pdtobj,
|
|
DWORD grfKeyState,
|
|
POINTL pt,
|
|
LPDWORD pdwEffect);
|
|
|
|
extern DWORD _LimitDefaultEffect(DWORD dwDefEffect, DWORD dwEffectsAllowed);
|
|
|
|
extern HRESULT CDS_IDLData_CloneForMoveCopy(LPDATAOBJECT pdtobjIn,
|
|
LPDATAOBJECT *ppdtobjOut);
|
|
|
|
extern void FS_PositionItems(HWND hwndOwner, UINT cidl,
|
|
const LPITEMIDLIST *ppidl,
|
|
IDataObject *pdtobj, POINT *pptOrigin,
|
|
BOOL fMove);
|
|
|
|
extern void FS_FreeMoveCopyList(LPITEMIDLIST *ppidl, UINT cidl);
|
|
|
|
extern BOOL FS_IsLinkDefault(LPCTSTR szFolder, HDROP hDrop, LPCTSTR pszFirst, BOOL fSameRoot);
|
|
|
|
HIDA HIDA_Create2(LPVOID pida, UINT cb);
|
|
|
|
HRESULT WINAPI SHCreateStdEnumFmtEtcEx(UINT cfmt,
|
|
const FORMATETC afmt[],
|
|
LPDATAOBJECT pdtInner,
|
|
LPENUMFORMATETC * ppenumFormatEtc);
|