53 lines
1.7 KiB
C
53 lines
1.7 KiB
C
|
#ifndef __IDLDROP_H__
|
||
|
#define __IDLDROP_H__
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwDefEffect;
|
||
|
IDataObject *pdtobj;
|
||
|
POINTL pt;
|
||
|
DWORD * pdwEffect;
|
||
|
HKEY hkeyProgID;
|
||
|
HKEY hkeyBase;
|
||
|
UINT idMenu;
|
||
|
UINT idCmd;
|
||
|
DWORD grfKeyState;
|
||
|
} DRAGDROPMENUPARAM;
|
||
|
|
||
|
class CIDLDropTarget: public IDropTarget
|
||
|
{
|
||
|
public:
|
||
|
CIDLDropTarget(HWND hwnd);
|
||
|
HRESULT _Init(LPCITEMIDLIST pidl);
|
||
|
HWND _GetWindow();
|
||
|
|
||
|
// IUnknown
|
||
|
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
|
||
|
STDMETHODIMP_(ULONG) AddRef();
|
||
|
STDMETHODIMP_(ULONG) Release();
|
||
|
|
||
|
// IDropTarget methods.
|
||
|
STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
|
||
|
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
|
||
|
STDMETHODIMP DragLeave();
|
||
|
STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
|
||
|
|
||
|
protected:
|
||
|
virtual ~CIDLDropTarget();
|
||
|
HRESULT DragDropMenu(DWORD dwDefaultEffect, IDataObject *pdtobj, POINTL pt, DWORD *pdwEffect, HKEY hkeyProgID, HKEY hkeyBase, UINT idMenu, DWORD grfKeyState);
|
||
|
HRESULT DragDropMenuEx(DRAGDROPMENUPARAM *pddm);
|
||
|
|
||
|
private:
|
||
|
LONG m_cRef;
|
||
|
|
||
|
protected:
|
||
|
HWND m_hwnd;
|
||
|
LPITEMIDLIST m_pidl; // IDList to the target folder
|
||
|
DWORD m_grfKeyStateLast; // for previous DragOver/Enter
|
||
|
IDataObject *m_pdtobj;
|
||
|
DWORD m_dwEffectLastReturned; // stashed effect that's returned by base class's dragover
|
||
|
DWORD m_dwData; // DTID_*
|
||
|
DWORD m_dwEffectPreferred; // if dwData & DTID_PREFERREDEFFECT
|
||
|
};
|
||
|
|
||
|
#endif
|