12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #if !defined(AFX_DRAGDROPLISTCTRL_H__17F6D56D_591C_4319_B0EB_9D6D9B45BC79__INCLUDED_)
- #define AFX_DRAGDROPLISTCTRL_H__17F6D56D_591C_4319_B0EB_9D6D9B45BC79__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif
- class CDragDropListCtrl : public CListCtrl
- {
- protected:
- // 要被拖动的1个或多个项的索引数组;
- CDWordArray m_anDragIndexes;
- // 当前被拖动项替换的项索引;
- int m_nDropIndex;
- // 当前拖动后鼠标停在选项上的索引
- int m_nCurIndex;
- // 拖动时的图标;
- CImageList* m_pDragImage;
- // 上一个索引;
- int m_nPrevDropIndex;
- // 上一个状态;
- UINT m_uPrevDropState;
- DWORD m_dwStyle;
- // 保存拖动的起始坐标;
- CPoint m_ptStart;
- // 当前移动的坐标点;
- CPoint m_ptCurr;
- // 移动起始点与当前坐标点间的所有项;
- void MoveDragItem(CPoint ptMove);
- enum EScrollDirection
- {
- scrollNull,
- scrollUp,
- scrollDown
- };
- EScrollDirection m_ScrollDirection;
- UINT m_uScrollTimer;
- public:
- CDragDropListCtrl();
- bool IsDragging() const { return m_pDragImage != NULL; }
- CDWordArray* GetDragIndexes(){return &m_anDragIndexes;}
- int GetDragSelIndex(){return m_nCurIndex;}
- public:
- virtual ~CDragDropListCtrl();
- protected:
- void DropItem();
- void DropItem(CPoint pt);
- void RestorePrevDropItemState();
- void UpdateSelection(int nDropIndex);
- void SetScrollTimer(EScrollDirection ScrollDirection);
- void KillScrollTimer();
- CImageList* CreateDragImageEx(LPPOINT lpPoint);
- // 获取点所对应的项矩形;
- int GetPtItemIndex(CPoint pt);
-
- protected:
- afx_msg void OnMouseMove(UINT nFlags, CPoint point);
- afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
- afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnTimer(UINT nIDEvent);
- DECLARE_MESSAGE_MAP()
- };
- #endif
|