//******************************************************************************* // COPYRIGHT NOTES // --------------- // You may use this source code, compile or redistribute it as part of your application // for free. You cannot redistribute it as a part of a software development // library without the agreement of the author. If the sources are // distributed along with the application, you should leave the original // copyright notes in the source code without any changes. // This code can be used WITHOUT ANY WARRANTIES at your own risk. // // For the latest updates to this code, check this site: // http://www.masmex.com // after Sept 2000 // // Copyright(C) 2000 Philip Oldaker //******************************************************************************* #if !defined(AFX_DRAGDROPCTRL_H__BC21D3A2_332C_11D1_ADE9_0000E81B9EF1__INCLUDED_) #define AFX_DRAGDROPCTRL_H__BC21D3A2_332C_11D1_ADE9_0000E81B9EF1__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // DragDropCtrl.h : header file // class CDD_OleDropTargetInfo : public CObject { DECLARE_DYNAMIC(CDD_OleDropTargetInfo) public: CDD_OleDropTargetInfo(HWND hWnd,CPoint &point,COleDataObject *pDataObject); CDD_OleDropTargetInfo(HWND hWnd); // Operations void SetItem(HTREEITEM hItem); void SetItem(int nItem); void SetDropEffect(DROPEFFECT dropEffect); void SetKeyboardState(DWORD dwKeyboardState); // Attributes HWND GetSafeHwnd() const; CPoint GetPoint() const; DWORD GetKeyboardState() const; const COleDataObject *GetDataObject() const; COleDataObject *GetDataObject(); HTREEITEM GetTreeItem() const; int GetListItem() const; DROPEFFECT GetDropEffect() const; protected: void InitInfo(HWND hWnd, const CPoint *pPoint=NULL, COleDataObject *pDataObject=NULL, DROPEFFECT dropeEffect=DROPEFFECT_NONE, DWORD dwKeyState=0, HTREEITEM hItem=NULL, int iItem=-1); private: HWND m_hWnd; // window mouse currently over CPoint m_point; // mouse position in client coordinates DROPEFFECT m_dropEffect; // The type of drop anticipated COleDataObject *m_pDataObject; // The OLE data that was cached at startup DWORD m_dwKeyState; // keyboard state when message was received HTREEITEM m_hDropItem; // tree item the mouse is over or currently selected (NULL if source not a tree control) int m_nDropItem; // list control item the mouse is over (-1 if source not a list control) }; inline CDD_OleDropTargetInfo::CDD_OleDropTargetInfo(HWND hWnd,CPoint &point,COleDataObject *pDataObject) { InitInfo(hWnd,&point,pDataObject); } inline CDD_OleDropTargetInfo::CDD_OleDropTargetInfo(HWND hWnd) { InitInfo(hWnd); } inline void CDD_OleDropTargetInfo::InitInfo(HWND hWnd, const CPoint *pPoint, COleDataObject *pDataObject, DROPEFFECT dropEffect, DWORD dwKeyState, HTREEITEM hItem, int iItem) { m_hWnd = hWnd; if (pPoint) m_point = *pPoint; else m_point = CPoint(); m_pDataObject = pDataObject; m_dropEffect = dropEffect; m_dwKeyState = dwKeyState; m_hDropItem = hItem; m_nDropItem = iItem; } inline void CDD_OleDropTargetInfo::SetItem(int nItem) { m_nDropItem = nItem; } inline void CDD_OleDropTargetInfo::SetItem(HTREEITEM hItem) { m_hDropItem = hItem; } inline void CDD_OleDropTargetInfo::SetDropEffect(DROPEFFECT dropEffect) { m_dropEffect = dropEffect; } inline void CDD_OleDropTargetInfo::SetKeyboardState(DWORD dwKeyboardState) { m_dwKeyState = dwKeyboardState; } inline DROPEFFECT CDD_OleDropTargetInfo::GetDropEffect() const { return m_dropEffect; } inline HWND CDD_OleDropTargetInfo::GetSafeHwnd() const { return m_hWnd; } inline CPoint CDD_OleDropTargetInfo::GetPoint() const { return m_point; } inline DWORD CDD_OleDropTargetInfo::GetKeyboardState() const { return m_dwKeyState; } inline const COleDataObject *CDD_OleDropTargetInfo::GetDataObject() const { return m_pDataObject; } inline COleDataObject *CDD_OleDropTargetInfo::GetDataObject() { return m_pDataObject; } inline HTREEITEM CDD_OleDropTargetInfo::GetTreeItem() const { return m_hDropItem; } inline int CDD_OleDropTargetInfo::GetListItem() const { return m_nDropItem; } ///////////////////////////////////////////////////////////////////////////// // CDragDropCtrl window class CTRL_EXT_CLASS CDragDropCtrl : public COleDropTarget { // Construction public: CDragDropCtrl(); // Attributes public: // Operations public: // Overrides virtual DROPEFFECT OnDragEnter( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point ); virtual DROPEFFECT OnDragOver( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point ); virtual BOOL OnDrop( CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point ); virtual void OnDragLeave( CWnd* pWnd); // Implementation public: virtual ~CDragDropCtrl(); private: DWORD m_dwKeyboardState; DWORD m_dwEnterKeyboardState; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DRAGDROPCTRL_H__BC21D3A2_332C_11D1_ADE9_0000E81B9EF1__INCLUDED_)