首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CListCtrl中捕获滚动事件?

如何在CListCtrl中捕获滚动事件?
EN

Stack Overflow用户
提问于 2009-09-21 21:21:23
回答 3查看 10.9K关注 0票数 1

我将CListCtrl子类划分为我自己的类,并在几个对话框和视图中使用它。我想做的是在垂直滚动ClistCtrl时执行一些代码。我需要它在CListCtrl子类本身中。

我可以检测到与滚动条交互时触发的滚动,该方法由demoncodemonkey提供:

信息地图:

代码语言:javascript
复制
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_WM_VSCROLL()
END_MESSAGE_MAP()

方法声明:

代码语言:javascript
复制
class CMyListCtrl : public CListCtrl
{
    //...
protected:
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    DECLARE_MESSAGE_MAP()
};

方法实现:

代码语言:javascript
复制
void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    //do some stuff here
    CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}

但是:

  • 鼠标滚轮滚动不会触发OnVScroll。
  • 当单击底部部分可见的CListCtrl项时发生的自动滚动(它是向上滚动的,因此项目是完全可见的)也没有触发OnVScroll。例如:

单击item 9会使ClistCtrl稍微滚动一些,因此该项目是完全可见的。

EN

回答 3

Stack Overflow用户

发布于 2009-09-21 21:59:19

信息地图:

代码语言:javascript
复制
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_WM_VSCROLL()
END_MESSAGE_MAP()

方法声明:

代码语言:javascript
复制
class CMyListCtrl : public CListCtrl
{
    //...
protected:
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    DECLARE_MESSAGE_MAP()
};

方法实现:

代码语言:javascript
复制
void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    //do some stuff here
    CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}
票数 5
EN

Stack Overflow用户

发布于 2009-10-25 15:26:14

鼠标滚轮滚动触发OnMouseWheel。

票数 3
EN

Stack Overflow用户

发布于 2019-02-01 10:37:19

一个更好的解决方案是使用发送到父窗口的LVN_BEGINSCROLLLVN_ENDSCROLL通知。(他们还解释了鼠标轮滚动的原因。)

尽管这仍然不能解决当用户使用键盘上下移动焦点列表项时发生的滚动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1456947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档