响应CListCtrl发出的WM_VSCROLL消息

funnymfc 2009-05-05 09:35:49
请注意是CListCtrl发出的WM_VSCROLL消息,不是对话框上的滚动条控件。
我想知道CListCtrl是否被翻动,代码如下

BEGIN_MESSAGE_MAP(CTest, CDialog)
ON_WM_VSCROLL()
END_MESSAGE_MAP()

void CMyList::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
MessageBox(_T("ok"));// TODO: 在此添加消息处理程序代码和/或调用默认值
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}


头文件:

class CMyList : public CListCtrl
{
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
};

结果点击滚动条上下的三角号时没有反应,请问如何修改?
...全文
423 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
funnymfc 2009-05-06
  • 打赏
  • 举报
回复

BEGIN_MESSAGE_MAP(CMyList, CListCtrl)
ON_WM_VSCROLL()
END_MESSAGE_MAP()

void CMyList::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
MessageBox(_T("ok"));
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}



class CMyList : public CListCtrl
{
public:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
private:
DECLARE_MESSAGE_MAP()
};

修改成这样还是不能响应CListCtrl发出的WM_VSCROLL消息,是不是还漏了什么代码?
高手帮帮忙吧,这个新建一个工程一两分钟的事情。解决了还可以再加分!
funnymfc 2009-05-06
  • 打赏
  • 举报
回复
也感谢jameshooo和biweilun的关注!
funnymfc 2009-05-06
  • 打赏
  • 举报
回复
非常感谢!我把CListCtrl m_list;改为CMyList m_list;就可以了。方法三。
cnzdgs 2009-05-06
  • 打赏
  • 举报
回复
一般有三种方式:
1、窗口类中定义CMyList对象,在窗口初始化时用该对象的Create函数创建;
2、对话框资源上放一个ListCtrl控件,窗口类中定义CMyList对象,在窗口初始化时用该对象的SubclassDlgItem与控件建立关联。
3、对话框资源上放一个ListCtrl控件,用VC给控件添加CListCtrl型的关联变量,再手动把变量类型该成CMyList。
funnymfc 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cnzdgs 的回复:]
CMyList对象与控件建立关联了吗?
[/Quote]
请问如何建立关联啊?
cnzdgs 2009-05-05
  • 打赏
  • 举报
回复
CMyList对象与控件建立关联了吗?
biweilun 2009-05-05
  • 打赏
  • 举报
回复
从CListCtrl派生自己的类。响应HSCROLL和VSCROLL的消息
funnymfc 2009-05-05
  • 打赏
  • 举报
回复
<00001> 00080572 S WM_VSCROLL nScrollCode:SB_PAGEDOWN hwndScrollBar:(null)
<00002> 00080572 R WM_VSCROLL
<00003> 00080572 S WM_VSCROLL nScrollCode:SB_ENDSCROLL hwndScrollBar:(null)
<00004> 00080572 R WM_VSCROLL
<00005> 00080572 S WM_VSCROLL nScrollCode:SB_PAGEUP hwndScrollBar:(null)
<00006> 00080572 R WM_VSCROLL
<00007> 00080572 S WM_VSCROLL nScrollCode:SB_ENDSCROLL hwndScrollBar:(null)
<00008> 00080572 R WM_VSCROLL
Spy++可以收到WM_VSCROLL消息,但是程序本身好像收不到。
而且我在List Control控件的所有消息里面找不到WM_VSCROLL,只有对话框才有WM_VSCROLL消息。难道List Control没有WM_VSCROLL消息?
jameshooo 2009-05-05
  • 打赏
  • 举报
回复
用SPY++跟踪一下消息
funnymfc 2009-05-05
  • 打赏
  • 举报
回复
对话框里头原来也有其他消息的。
我在对话框的消息后面添加了

BEGIN_MESSAGE_MAP(CMyList, CListCtrl)
ON_WM_VSCROLL()
END_MESSAGE_MAP()

头文件:

class CMyList : public CListCtrl
{
public:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
private:
DECLARE_MESSAGE_MAP()
};

是这样改吗?还是不能弹出提示啊。
cnzdgs 2009-05-05
  • 打赏
  • 举报
回复
BEGIN_MESSAGE_MAP(CTest, CDialog)
BEGIN_MESSAGE_MAP(CMyList, CListCtrl)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧