treedragdrophelper.h

来自「管理项目进度工具的原代码」· C头文件 代码 · 共 108 行

H
108
字号
// TreeDragDropHelper.h: interface for the CTreeDragDropHelper class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TREEDRAGDROPHELPER_H__06381648_F0F3_4791_8204_6A0A8798F29A__INCLUDED_)
#define AFX_TREEDRAGDROPHELPER_H__06381648_F0F3_4791_8204_6A0A8798F29A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "..\3rdparty\dragdrop.h"
#include "..\shared\treeselectionhelper.h"

enum TDDH_MOVE	
{
	MOVE_DOWN,
	MOVE_UP,
	MOVE_LEFT,
	MOVE_RIGHT,
};

struct TDDHCOPY; // private helper

class CTreeDragDropHelper
{
public:
	CTreeDragDropHelper(CTreeSelectionHelper& selection, CTreeCtrl& tree,
						BOOL bTreeUsesTextCallback = FALSE, BOOL bTreeUsesImageCallback = FALSE);
	virtual ~CTreeDragDropHelper();

	BOOL Initialize(CWnd* pOwner, BOOL bEnabled = TRUE, BOOL bAllowNcDrag = TRUE);
	void EnableDragDrop(BOOL bEnable) { m_bEnabled = bEnable; }
	UINT ProcessMessage(const MSG* pMsg);

	BOOL AddTargetWnd(CWnd* pWnd);
	
	BOOL MoveSelection(TDDH_MOVE nDirection);
	BOOL CanMoveSelection(TDDH_MOVE nDirection) const;

	BOOL GetDropTarget(HTREEITEM& htiDrop, HTREEITEM& htiAfter);
	BOOL IsDragging() { return m_ddMgr.IsDragging(); }

protected:
	CTreeSelectionHelper& m_selection;
	CTreeCtrl& m_tree;
	CDragDropMgr m_ddMgr;
	BOOL m_bEnabled;
	HTREEITEM m_htiDropTarget, m_htiDropAfter;
	UINT m_nScrollTimer, m_nExpandTimer;
	BOOL m_bAllowNcDrag;
	BOOL m_bTreeUsesTextCallback;
	BOOL m_bTreeUsesImageCallback;

	static CTreeDragDropHelper* s_pTDDH;

	enum DDWHERE
	{
		DD_ABOVE = -1,
		DD_ON = 0,
		DD_BELOW = 1
	};

	struct DROPPOSITION
	{
		HTREEITEM htiDrop;
		DDWHERE nWhere;
	};

	DROPPOSITION m_dropPos;

protected:
	BOOL CanMoveItem(HTREEITEM hti, TDDH_MOVE nDirection) const;

	BOOL MoveSelectionDown();
	BOOL MoveSelectionUp();
	BOOL MoveSelectionLeft(); // up a level
	BOOL MoveSelectionRight(); // down a level

	void BuildCopy(const HTREEITEM hti, TDDHCOPY* pCopy) const;
	HTREEITEM CopyTree (HTREEITEM hDest, HTREEITEM hSrc, DDWHERE nWhere);
	HTREEITEM MoveTree (HTREEITEM hDest, HTREEITEM hSrc, DDWHERE nWhere);
	HTREEITEM CopyTree(HTREEITEM hDest, const TDDHCOPY* pSrc, DDWHERE nWhere);

	void GetAnchorSel(HTREEITEM& htiAnchor, HTREEITEM& htiTreeSel) const;
	void UpdateAnchorSel(HTREEITEM htiPrev, HTREEITEM htiNew, HTREEITEM& htiAnchor, HTREEITEM& htiTreeSel) const;
	void RestoreAnchorSel(HTREEITEM htiAnchor, HTREEITEM htiTreeSel);

	HTREEITEM HitTest(CPoint pt) const { DDWHERE nWhere; return HitTest(pt, nWhere); }
	HTREEITEM HitTest(CPoint pt, DDWHERE& nWhere) const;
	HTREEITEM HighlightDropTarget(CPoint point);
	HTREEITEM HighlightDropTarget(); // get current cursor pos

	enum { TIMER_SCROLL, TIMER_EXPAND };
	void SetTimer(int nTimer, UINT nPeriod);
	static VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime);

	// pseudo message handlers
	void OnTimer(UINT nIDEvent);
	BOOL OnDragEnter(DRAGDROPINFO* pDDI); // not const arg because we set pData
	BOOL OnDragPreMove(const DRAGDROPINFO* pDDI);
	UINT OnDragOver(const DRAGDROPINFO* pDDI);
	BOOL OnDragDrop(const DRAGDROPINFO* pDDI);
	BOOL OnDragAbort();
};

#endif // !defined(AFX_TREEDRAGDROPHELPER_H__06381648_F0F3_4791_8204_6A0A8798F29A__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?