a
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
#include "CDragListCtrl.h"
|
||||
|
||||
// BEGIN_MESSAGE_MAP(CDragListCtrl, CListCtrl)
|
||||
// ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_LOOP_SUB_LIST, &CDragListCtrl::OnLvnBegindragListLoopTaskList)
|
||||
// ON_MESSAGE(WM_MOUSEMOVE, OnMouseMove)
|
||||
// ON_MESSAGE(WM_LBUTTONUP, OnLButtonUp)
|
||||
// END_MESSAGE_MAP()
|
||||
|
||||
CDragListCtrl::CDragListCtrl()
|
||||
{
|
||||
m_nSelItem = -1;
|
||||
m_pDragImageList = NULL;
|
||||
m_bDragging = FALSE;
|
||||
}
|
||||
|
||||
CDragListCtrl::~CDragListCtrl()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/*void CDragListCtrl::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
{
|
||||
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
*pResult = 0;
|
||||
|
||||
int count = GetSelectedCount();
|
||||
if (1 != count)
|
||||
return;
|
||||
|
||||
POSITION pos = GetFirstSelectedItemPosition();
|
||||
if (NULL == pos)
|
||||
return;
|
||||
|
||||
m_nSelItem = GetNextSelectedItem(pos);
|
||||
|
||||
if (-1 == m_nSelItem)
|
||||
return;
|
||||
|
||||
CPoint pt = pNMLV->ptAction;
|
||||
m_pDragImageList = CreateDragImage(m_nSelItem, &pt);
|
||||
if (NULL == m_pDragImageList)
|
||||
return;
|
||||
|
||||
m_bDragging = TRUE;
|
||||
m_pDragImageList->BeginDrag(0, CPoint(8, 8));
|
||||
ClientToScreen(&pt);
|
||||
CRect rt;
|
||||
GetParent()->GetWindowRect(&rt);
|
||||
pt.x -= rt.left;
|
||||
pt.y -= rt.top;
|
||||
m_pDragImageList->DragEnter(GetParent(), pt);
|
||||
SetCapture();
|
||||
}
|
||||
|
||||
|
||||
void CDragListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
if (m_bDragging)
|
||||
{
|
||||
ReleaseCapture();
|
||||
m_bDragging = FALSE;
|
||||
//m_nSelItem = -1;
|
||||
m_pDragImageList->DragLeave(GetParent());
|
||||
m_pDragImageList->EndDrag();
|
||||
m_pDragImageList->DeleteImageList();
|
||||
|
||||
delete m_pDragImageList;
|
||||
m_pDragImageList = NULL;
|
||||
}
|
||||
|
||||
CListCtrl::OnLButtonUp(nFlags, point);
|
||||
}
|
||||
|
||||
void CDragListCtrl::OnMouseMove(UINT nFlags, CPoint point)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
if (m_bDragging)
|
||||
{
|
||||
CPoint pt = point;
|
||||
ClientToScreen(&pt);
|
||||
|
||||
CRect rt;
|
||||
GetParent()->GetWindowRect(&rt);
|
||||
pt.x -= rt.left;
|
||||
pt.y -= rt.top;
|
||||
m_pDragImageList->DragMove(pt);
|
||||
}
|
||||
|
||||
CListCtrl::OnMouseMove(nFlags, point);
|
||||
}*/
|
||||
BEGIN_MESSAGE_MAP(CDragListCtrl, CListCtrl)
|
||||
ON_NOTIFY_REFLECT(LVN_BEGINDRAG, &CDragListCtrl::OnLvnBegindrag)
|
||||
ON_WM_LBUTTONUP()
|
||||
ON_WM_MOUSEMOVE()
|
||||
//ON_WM_LBUTTONDOWN()
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CDragListCtrl::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
{
|
||||
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
*pResult = 0;
|
||||
|
||||
int count = GetSelectedCount();
|
||||
if (1 != count)
|
||||
return;
|
||||
|
||||
POSITION pos = GetFirstSelectedItemPosition();
|
||||
if (NULL == pos)
|
||||
return;
|
||||
|
||||
m_nSelItem = GetNextSelectedItem(pos);
|
||||
|
||||
if (-1 == m_nSelItem)
|
||||
return;
|
||||
|
||||
CPoint pt = pNMLV->ptAction;
|
||||
m_pDragImageList = CreateDragImage(m_nSelItem, &pt);
|
||||
if (NULL == m_pDragImageList)
|
||||
return;
|
||||
|
||||
m_bDragging = TRUE;
|
||||
m_pDragImageList->BeginDrag(0, CPoint(8, 8));
|
||||
ClientToScreen(&pt);
|
||||
CRect rt;
|
||||
GetParent()->GetWindowRect(&rt);
|
||||
pt.x -= rt.left;
|
||||
pt.y -= rt.top;
|
||||
m_pDragImageList->DragEnter(GetParent(), pt);
|
||||
|
||||
CDragList::BeginDrag(m_hWnd, pt);
|
||||
SetCapture();
|
||||
}
|
||||
|
||||
|
||||
void CDragListCtrl::OnMouseMove(UINT nFlags, CPoint point)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
if (m_bDragging)
|
||||
{
|
||||
CPoint pt = point;
|
||||
ClientToScreen(&pt);
|
||||
|
||||
CRect rt;
|
||||
GetParent()->GetWindowRect(&rt);
|
||||
pt.x -= rt.left;
|
||||
pt.y -= rt.top;
|
||||
m_pDragImageList->DragMove(pt);
|
||||
}
|
||||
|
||||
if (CDragList::m_SelectItem != SELECT_NONE && nFlags&MK_LBUTTON)
|
||||
{
|
||||
CDragList::Dragging(m_hWnd, point);
|
||||
}
|
||||
|
||||
CListCtrl::OnMouseMove(nFlags, point);
|
||||
}
|
||||
|
||||
void CDragListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
if (m_bDragging)
|
||||
{
|
||||
ReleaseCapture();
|
||||
m_bDragging = FALSE;
|
||||
//m_nSelItem = -1;
|
||||
m_pDragImageList->DragLeave(GetParent());
|
||||
m_pDragImageList->EndDrag();
|
||||
m_pDragImageList->DeleteImageList();
|
||||
|
||||
delete m_pDragImageList;
|
||||
m_pDragImageList = NULL;
|
||||
}
|
||||
|
||||
CDragList::EndDrag(m_hWnd, point);
|
||||
CListCtrl::OnLButtonUp(nFlags, point);
|
||||
}
|
||||
/*void CDragListCtrl::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
{
|
||||
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
*pResult = 0;
|
||||
|
||||
int count = GetSelectedCount();
|
||||
if (1 != count)
|
||||
return;
|
||||
|
||||
POSITION pos = GetFirstSelectedItemPosition();
|
||||
if (NULL == pos)
|
||||
return;
|
||||
|
||||
m_nSelItem = GetNextSelectedItem(pos);
|
||||
|
||||
if (-1 == m_nSelItem)
|
||||
return;
|
||||
|
||||
CPoint pt = pNMLV->ptAction;
|
||||
m_pDragImageList = CreateDragImage(m_nSelItem, &pt);
|
||||
if (NULL == m_pDragImageList)
|
||||
return;
|
||||
|
||||
m_bDragging = TRUE;
|
||||
m_pDragImageList->BeginDrag(0, CPoint(8, 8));
|
||||
ClientToScreen(&pt);
|
||||
CRect rt;
|
||||
GetParent()->GetWindowRect(&rt);
|
||||
pt.x -= rt.left;
|
||||
pt.y -= rt.top;
|
||||
m_pDragImageList->DragEnter(GetParent(), pt);
|
||||
SetCapture();
|
||||
}
|
||||
|
||||
|
||||
void CDragListCtrl::OnMouseMove(UINT nFlags, CPoint point)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
if (m_bDragging)
|
||||
{
|
||||
CPoint pt = point;
|
||||
ClientToScreen(&pt);
|
||||
|
||||
CRect rt;
|
||||
GetParent()->GetWindowRect(&rt);
|
||||
pt.x -= rt.left;
|
||||
pt.y -= rt.top;
|
||||
m_pDragImageList->DragMove(pt);
|
||||
}
|
||||
|
||||
CListCtrl::OnMouseMove(nFlags, point);
|
||||
}
|
||||
|
||||
void CDragListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
if (m_bDragging)
|
||||
{
|
||||
ReleaseCapture();
|
||||
m_bDragging = FALSE;
|
||||
//m_nSelItem = -1;
|
||||
m_pDragImageList->DragLeave(GetParent());
|
||||
m_pDragImageList->EndDrag();
|
||||
m_pDragImageList->DeleteImageList();
|
||||
|
||||
delete m_pDragImageList;
|
||||
m_pDragImageList = NULL;
|
||||
}
|
||||
CListCtrl::OnLButtonUp(nFlags, point);
|
||||
}*/
|
||||
|
||||
// void CDragListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
|
||||
// {
|
||||
// // TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
//
|
||||
// CListCtrl::OnLButtonDown(nFlags, point);
|
||||
// CDragList::BeginDrag(m_hWnd, point);
|
||||
// OutputDebugString(_T("CDragListCtrl::OnLButtonDown()\n"));
|
||||
// }
|
||||
Reference in New Issue
Block a user