我将CListCtrl子类划分为我自己的类,并在几个对话框和视图中使用它。我想做的是在垂直滚动ClistCtrl时执行一些代码。我需要它在CListCtrl子类本身中。
我可以检测到与滚动条交互时触发的滚动,该方法由demoncodemonkey提供:
信息地图:
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_WM_VSCROLL()
END_MESSAGE_MAP()方法声明:
class CMyListCtrl : public CListCtrl
{
//...
protected:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
DECLARE_MESSAGE_MAP()
};方法实现:
void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
//do some stuff here
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}但是:

单击item 9会使ClistCtrl稍微滚动一些,因此该项目是完全可见的。
发布于 2009-09-21 21:59:19
信息地图:
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_WM_VSCROLL()
END_MESSAGE_MAP()方法声明:
class CMyListCtrl : public CListCtrl
{
//...
protected:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
DECLARE_MESSAGE_MAP()
};方法实现:
void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
//do some stuff here
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}发布于 2009-10-25 15:26:14
鼠标滚轮滚动触发OnMouseWheel。
发布于 2019-02-01 10:37:19
一个更好的解决方案是使用发送到父窗口的LVN_BEGINSCROLL或LVN_ENDSCROLL通知。(他们还解释了鼠标轮滚动的原因。)
尽管这仍然不能解决当用户使用键盘上下移动焦点列表项时发生的滚动。
https://stackoverflow.com/questions/1456947
复制相似问题