当前位置:   article > 正文

CListBox使用:MFC中的多个CListBox之间实现鼠标拖拽移动内容_clistbox实现鼠标左键拖动后,选中listbox的多行数据

clistbox实现鼠标左键拖动后,选中listbox的多行数据

功能描述:

当界面中有两个或两个以上CListBox时,需要实现控件在一定控件范围内相互拖动,列表内容在拖动后动态增删,并且在拖动过程中,鼠标显示拖动样式。
以下实例是在两个CListBox控件之间进行拖动:

实现步骤:

1、首先生成cur指针文件
可用在线图片处理工具,或者ps讲png格式图片转换成cur文件格式
文件转换要求:loadcursor 对文件要求 3232 24位深度以下 底色需要处理透明
2、对话框重载一下虚函数,定义两个标记变量,详细实现见参考代码
virtual BOOL PreTranslateMessage(MSG
pMsg);
bool m_bLeftFg; // 左侧移动标记
bool m_bRightFg; // 右侧移动标记

参考代码:

BOOL CDlgSetTunnelBranch::PreTranslateMessage(MSG *pMsg)
{
	BOOL bFlag=CAcUiDialog::PreTranslateMessage(pMsg);
	CRect cRectPre,cRectNow,cRectEnd; // 记录控件位置
	CPoint curPoint; // 记录鼠标位置
	::GetCursorPos(&curPoint); 
	GetDlgItem(IDC_LIST_TUNNELBRANCH_LEFT)->GetWindowRect(&cRectPre);
	GetDlgItem(IDC_LIST_TUNNELBRANCH_RIGHT)->GetWindowRect(&cRectEnd);

        // 若鼠标位置在左侧控件上方
	if(curPoint.x >=cRectPre.left && curPoint.x <=cRectPre.right && curPoint.y >=cRectPre.top && curPoint.y <=cRectPre.bottom)
	{
		if(pMsg->message == WM_LBUTTONDOWN)  //  鼠标按下
		{
			m_bLeftFg = true;  // 设置左侧标记true
		}

                // 若鼠标释放,且右侧标记为true ,则进行移动操作,然后将右侧标记置位false
		if(pMsg->message == WM_LBUTTONUP && m_bRightFg)
		{
			OnBnClickedButtonTunnelbranchForLeft();
			m_bRightFg = false;
		}
	}
        // 若鼠标位置在右侧控件上方
	if(curPoint.x >=cRectEnd.left && curPoint.x <=cRectEnd.right && curPoint.y >=cRectEnd.top && curPoint.y <=cRectEnd.bottom)
	{
		if(pMsg->message == WM_LBUTTONDOWN)  //  鼠标按下
		{
			m_bRightFg = true;  // 设置右侧标记true
		}
                // 若鼠标释放,且左侧标记为true ,则进行移动操作,然后将左侧标记置位false
		if(pMsg->message == WM_LBUTTONUP && m_bLeftFg)
		{
			OnBnClickedButtonTunnelForRight();
			m_bLeftFg = false;
		}
	}

  // 若鼠标抬起则将两个标记都置位false,同时还原鼠标样式
	if(pMsg->message == WM_LBUTTONUP)
	{
		m_bLeftFg = false;
		m_bRightFg = false;
		::SetCursor(::LoadCursor(NULL,IDC_ARROW));
		::ReleaseCapture();
	}
	
// 若鼠标移动,且左侧或右侧标记为true,则修改鼠标样式为拖动样式
	if (pMsg->message == WM_MOUSEMOVE && (m_bLeftFg || m_bRightFg)) 
	{
		::SetCapture(GetSafeHwnd());
		::SetCursor(::LoadCursor(AfxGetResourceHandle(), MAKEINTRESOURCE(IDC_POINTER_DRAG))); // 此处为cur文件的ID
	}

	return bFlag;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

这里写图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/144200
推荐阅读
相关标签
  

闽ICP备14008679号