WindowsXP-SP1/admin/activec/conui/dd.h
2020-09-30 16:53:49 +02:00

75 lines
3.0 KiB
C++

#pragma once
#ifndef DD_H_INCLUDED
#define DD_H_INCLUDED
/*
Classes participating in Drag-And-Drop:
CMMCDropSource
1. Implements IDropSource interface and the created instance of this class
is given to OLE for d&d operation
2. Implements static member ScDoDragDrop which creates the instance and starts d&d
by calling OLE Api function
CMMCDropTarget ( TiedComObject tied to CMMCViewDropTarget )
Implements interface IDropTarget interface and the created instance of this class
is given to OLE for d&d operation. Its instances are tied to CMMCViewDropTarget instance
and it places the call to this class in respond to method invocations made by OLE
CMMCViewDropTarget
Adds d&d support to the view by creating the instance of CMMCDropTarget (TiedComObject)
and registering it with OLE, responding to method calls made by that instance and invoking
virtual methods on derived class to do the HitTest/Drop.
Registration in done by invoking protected method ScRegisterAsDropTarget.
Target is revoke on destructor.
CAMCTreeView
Derives from CMMCViewDropTarget. Registers after window is created.
Implements virtual methods to HitTest / Perform the Drop.
CAMCListView
Derives from CMMCViewDropTarget. Registers after window is created.
Implements virtual methods to HitTest / Perform the Drop.
*/
/***************************************************************************\
*
* CLASS: CMMCViewDropTarget
*
* PURPOSE: Defines common behavior for D&D-enabled view,
* Also defines the interface for HitTest function
*
* USAGE: Derive your view from this class (CAMCListView and CAMCTreeView does)
* Implement virtual methods ScDropOnTarget and RemoveDropTargetHiliting in your class
* Add a call to ScRegisterAsDropTarget() after the window is created
*
\***************************************************************************/
class CMMCViewDropTarget : public CTiedObject
{
protected:
// these methods should only be used by the derived class
// construction - destruction
CMMCViewDropTarget();
~CMMCViewDropTarget();
// drop target registration
SC ScRegisterAsDropTarget(HWND hWnd);
public:
// interface methods the derived class must implement
virtual SC ScDropOnTarget(bool bHitTestOnly, IDataObject * pDataObject, CPoint pt, bool& bCopyOperation) = 0;
virtual void RemoveDropTargetHiliting() = 0;
// accessory used by tied com object to display the context menu
HWND GetWindowHandle() { return m_hwndOwner; }
private:
// implementation helper - creates tied com object
SC ScCreateTarget(IDropTarget **ppTarget);
IDropTargetPtr m_spTarget; // tied com object
HWND m_hwndOwner; // window handle of the wiew
};
#endif DD_H_INCLUDED