博客
关于我
CListBox使用:MFC中的多个CListBox之间实现鼠标拖拽移动内容
阅读量:188 次
发布时间:2019-02-28

本文共 1928 字,大约阅读时间需要 6 分钟。

功能描述:在界面中,当存在两个或多个CListBox控件时,需要实现它们之间的拖动功能。拖动时,列表内容会动态增删,并且在拖动过程中,鼠标会显示拖动样式。

实现步骤:首先,需要生成相应的拖动曲标文件(.cur格式)。可以使用在线工具或图片处理软件将图片转换为.cur文件,确保文件大小为32×32像素,颜色深度为24位,底色处理透明。

接下来,重载对话框类的PreTranslateMessage虚函数,定义两个布尔变量来控制拖动状态。具体实现如下:

代码示例:

bool CDlgSetTunnelBranch::PreTranslateMessage(MSG *pMsg){    BOOL bFlag = CAcUiDialog::PreTranslateMessage(pMsg);    CRect cRectPre, 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        }        if (pMsg->message == WM_LBUTTONUP && m_bRightFg)        {            OnBnClickedButtonTunnelbranchForLeft();            m_bRightFg = false; // 将右侧标记置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        }        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();    }    // 处理拖动时的鼠标样式    if (pMsg->message == WM_MOUSEMOVE && (m_bLeftFg || m_bRightFg))    {        ::SetCapture(GetSafeHwnd());        ::SetCursor(::LoadCursor(AfxGetResourceHandle(), MAKEINTRESOURCE(IDC_POINTER_DRAG)));    }    return bFlag;}

这个代码实现了拖动功能,包括拖动时的鼠标样式变化和列表内容的动态增删。

转载地址:http://qbqn.baihongyu.com/

你可能感兴趣的文章
Ploly:如何在Excel中嵌入完全交互的Ploly图形?
查看>>
plotloss记录
查看>>
Plotly (Python) 子图:填充构面和共享图例
查看>>
Plotly 中的行悬停文本
查看>>
Plotly 停用 x 轴排序
查看>>
Plotly 域变量解释(多图)
查看>>
Plotly 绘制表面 3D 未显示
查看>>
Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
查看>>
Plotly-Dash:如何过滤具有多个数据框列的仪表板?
查看>>
Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
查看>>
Plotly:如何从 x 轴删除空日期?
查看>>
Plotly:如何从单条迹线制作堆积条形图?
查看>>
Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
查看>>
Plotly:如何使用 Plotly Express 组合散点图和线图?
查看>>
Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
查看>>
Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
查看>>
Plotly:如何使用 updatemenus 更新一个特定的跟踪?
查看>>
Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
查看>>
Plotly:如何向烛台图添加交易量
查看>>
Plotly:如何在 plotly express 中找到趋势线的系数?
查看>>