MFC之两个CListCtrl控件滚动条同步

创建CListCtrlP类

首先我们需要添加一个类让它去继承CListCtrl类,然后将我们需要实现的功能添加进这个新的类中。

class CListCtrlP :public CListCtrl
{
public:
    CListCtrlP();
    ~CListCtrlP();
protected:
    DECLARE_MESSAGE_MAP()
    //响应事件
    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
public:
	// 绑定对象
    void Binding(CListCtrlP* obj);
private:
	// 定义一个对象用于指向需要同步的控件
    CListCtrlP* m_obj;
    // 保存上一次移动的位置
    CSize m_cSize;
};

实现滚动条同步

void CListCtrlP::Binding(CListCtrlP* obj)
{
    m_obj = obj;
}
void CListCtrlP::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // todo
    CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
    int nPosx = this->GetScrollPos(0);
    int nPosy = this->GetScrollPos(1);
    //计算移动量
    int cx = nPosx - m_cSize.cx;
    int cy = (nPosy - m_cSize.cy) * 33;
    //设置移动量
    CSize size(cx, cy);
    m_obj->Scroll(size);
    m_cSize.cx = nPosx;
    m_cSize.cy = nPosy;
}
void CListCtrlP::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // todo
    CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
    int nPosx = this->GetScrollPos(0);
    int nPosy = this->GetScrollPos(1);
    int cx = nPosx - m_cSize.cx;
    int cy = nPosy - m_cSize.cy;
    CSize size(cx, cy);
    m_obj->Scroll(size);
    m_cSize.cx = nPosx;
    m_cSize.cy = nPosy;
}

使用

将两个控件绑定

list1.Binding(&list2);
list2.Binding(&list1);

使用鼠标移动滚动条时,另一个控件的滚动条也会相应改变。
此处没添加滚轮事件,所以使用滚轮滑动时不会触发,需要额外添加滚轮事件去处理。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值