Source code of Windows XP (NT5)
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.
|
|
#include <windows.h>
#include "dropsrc.h"
#include "common.h"
//-----------------------------------------------------------------
typedef struct { IDropSource dsrc; UINT cRef; DWORD grfInitialKeyState; } CDropSource;
IDropSourceVtbl c_CDropSourceVtbl; // forward decl
HRESULT CDropSource_CreateInstance(IDropSource **ppdsrc) { CDropSource *this = (CDropSource *)LocalAlloc(LPTR, sizeof(CDropSource)); if (this) { this->dsrc.lpVtbl = &c_CDropSourceVtbl; this->cRef = 1; *ppdsrc = &this->dsrc;
return S_OK; } else { *ppdsrc = NULL; return E_OUTOFMEMORY; } }
STDMETHODIMP CDropSource_QueryInterface(IDropSource *pdsrc, REFIID riid, void **ppvObj) { CDropSource *this = IToClass(CDropSource, dsrc, pdsrc);
if (IsEqualIID(riid, &IID_IDropSource) || IsEqualIID(riid, &IID_IUnknown)) { *ppvObj = this; this->cRef++; return S_OK; }
*ppvObj = NULL; return E_NOINTERFACE; }
STDMETHODIMP_(ULONG) CDropSource_AddRef(IDropSource *pdsrc) { CDropSource *this = IToClass(CDropSource, dsrc, pdsrc);
this->cRef++; return this->cRef; }
STDMETHODIMP_(ULONG) CDropSource_Release(IDropSource *pdsrc) { CDropSource *this = IToClass(CDropSource, dsrc, pdsrc);
this->cRef--; if (this->cRef > 0) return this->cRef;
LocalFree((HLOCAL)this);
return 0; }
STDMETHODIMP CDropSource_QueryContinueDrag(IDropSource *pdsrc, BOOL fEscapePressed, DWORD grfKeyState) { CDropSource *this = IToClass(CDropSource, dsrc, pdsrc);
if (fEscapePressed) return DRAGDROP_S_CANCEL;
// initialize ourself with the drag begin button
if (this->grfInitialKeyState == 0) this->grfInitialKeyState = (grfKeyState & (MK_LBUTTON | MK_RBUTTON | MK_MBUTTON));
Assert(this->grfInitialKeyState);
if (!(grfKeyState & this->grfInitialKeyState)) return DRAGDROP_S_DROP; else return S_OK; }
STDMETHODIMP CDropSource_GiveFeedback(IDropSource *pdsrc, DWORD dwEffect) { CDropSource *this = IToClass(CDropSource, dsrc, pdsrc); return DRAGDROP_S_USEDEFAULTCURSORS; }
IDropSourceVtbl c_CDropSourceVtbl = { CDropSource_QueryInterface, CDropSource_AddRef, CDropSource_Release, CDropSource_QueryContinueDrag, CDropSource_GiveFeedback };
|