Windows2003-3790/windows/advcore/duser/engine/ctrl/dragdrop.h
2020-09-30 16:53:55 +02:00

102 lines
3.1 KiB
C++

/***************************************************************************\
*
* File: DragDrop.h
*
* Description:
* DragDrop.h defines drag and drop operations
*
*
* History:
* 7/31/2000: JStall: Created
*
* Copyright (C) 2000 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
#if !defined(CORE__DragDrop_h__INCLUDED)
#define CORE__DragDrop_h__INCLUDED
#pragma once
#if ENABLE_MSGTABLE_API
#include "Extension.h"
class TargetLock;
#if 1
class DuDropTarget :
public DropTargetImpl<DuDropTarget, DuExtension>,
public IDropTarget
{
protected:
inline DuDropTarget();
~DuDropTarget();
public:
static HRESULT InitClass();
// IDropTarget
public:
STDMETHOD(DragEnter)(IDataObject * pdoSrc, DWORD grfKeyState, POINTL ptDesktopPxl, DWORD * pdwEffect);
STDMETHOD(DragOver)(DWORD grfKeyState, POINTL ptDesktopPxl, DWORD * pdwEffect);
STDMETHOD(DragLeave)();
STDMETHOD(Drop)(IDataObject * pdoSrc, DWORD grfKeyState, POINTL ptDesktopPxl, DWORD * pdwEffect);
// Public API
public:
dapi HRESULT ApiOnDestroySubject(DropTarget::OnDestroySubjectMsg * pmsg);
static HRESULT CALLBACK
PromoteDropTarget(DUser::ConstructProc pfnCS, HCLASS hclCur, DUser::Gadget * pgad, DUser::Gadget::ConstructInfo * pmicData);
static HCLASS CALLBACK
DemoteDropTarget(HCLASS hclCur, DUser::Gadget * pgad, void * pvData);
// Implementation
protected:
inline BOOL HasSource() const;
inline BOOL HasTarget() const;
HRESULT xwDragScan(POINTL ptDesktopPxl, DWORD * pdwEffect, POINT * pptClientPxl);
HRESULT xwUpdateTarget(POINT ptContainerPxl, DWORD * pdwEffect, POINT * pptClientPxl);
HRESULT xwUpdateTarget(Visual * pgvFound, DWORD * pdwEffect, POINT * pptClientPxl);
HRESULT xwDragEnter(POINT * pptClientPxl, DWORD * pdwEffect);
void xwDragLeave();
// Data
protected:
static const IID * s_rgpIID[];
IDropTarget *
m_pdtCur; // Current Gadget DuDropTarget
IDataObject *
m_pdoSrc; // Source's data object
HWND m_hwnd; // Containing HWND
DWORD m_grfLastKeyState; // Last key state
POINT m_ptLastContainerPxl; // Last container pixel
Visual * m_pgvDrop; // Current DuDropTarget
static PRID s_pridListen; // PRID for DuDropTarget
friend class TargetLock;
};
class TargetLock
{
public:
inline TargetLock();
inline ~TargetLock();
BOOL Lock(DuDropTarget * p, DWORD * pdwEffect, BOOL fAddRef = TRUE);
protected:
IUnknown * m_punk;
BOOL m_fAddRef;
};
#endif // ENABLE_MSGTABLE_API
#endif
#include "DragDrop.inl"
#endif // CORE__DragDrop_h__INCLUDED