MFC中listctrol控件实现自带的垂直滚动条拖动和鼠标滚动事件响应
因为list控件里数据太多而出现的滚动条,并没有ID,所以我们不能像处理寻常控件那样来处理它,这时我们要用到ON_WM_VSCROLL来接收滚动条的拖动消息,拖动消息为WM_VSCROLL,但这样它会响应所有的滚动条,简单来说ON_WM_VSCROLL()这个消息映射是全局的,这是我找到的唯一办法,它只能响应拖动,滚动没有用,我滚动用的是重载PreTranslateMessage(MSG *pMsg),用它来拦截滚动消息(不能拦截拖动消息,因为拖动消息没有进消息队列)。
废话够了,直接上代码:
只能在CListCtrl的派生类中来响应WM_VSCROLL信号,图为响应函数执行内容,响应函数定义和消息映射这里就不做说明,直接定义就行,图中执行的为发送一个自定义信号给当前窗口,因为我的list控件还在该类的派生类中,不能直接来加载数据,具体看你怎么写,所以我是发一个信号用来被捕获来判断是否拖动事件发生。
这里重载PreTranslateMessage函数用来拦截信号,里面的话就用if来判断你要拦截的信号,再编写你将实现的功能,我的if判断的是鼠标滚动消息和自己上面自定义的消息。
总体的说,这样就能实现list控件里自带的滚动条拖动和滚动响应。
我是一个小白,这是我的第一篇博客,如果有哪讲的不够清楚的欢迎提出来,如果你有好的解决办法,也希望能跟我分享分享。