读书人

滚动条自绘小弟我是不是想多了呢

发布时间: 2012-04-15 18:39:21 作者: rapoo

滚动条自绘,我是不是想多了呢?
上网搜索了一下,发现这个问题原来是不简单的?这不同于普通按钮、单选复选按钮、组合框等等的自绘,是因为它属于窗口的一部分,而不是一个独立的窗口?

那么如果我要做一个比较完美的自绘滚动条(所谓不完美,就是用其它取巧的办法,比如“遮挡”——http://www.vckbase.com/document/viewdoc/?id=1902),是不是需要以下复杂的做法?——

1. 自绘滚动条类继承CWnd,提供设置自定义滚动条贴图的接口。
2. 使滚动条可以设置绑定一个窗口,对滚动条的不同操作模拟发送不同的真实滚动条的消息到该窗口(比如模拟发送SB_LINEDOWN、SB_THUMBTRACK等等)。
3. 这也就是最难的一步。由于需要支持标准控件的滚动条自绘(比如标准编辑框、标准列表框等等),因此需要使得在这些标准控件上面的操作可以影响到自绘的滚动条。我的想法是,使用进程内API钩子,钩取SetScrollInfo()等等、还有比较过时的SetScrollRange()等等所有操作滚动条的API,然后就可以知道控件里面的操作怎样影响自绘的滚动条,自绘的滚动条应该怎样地变化。

请教各位,我是不是想多了呢?有没有简捷一点或者常规一点的思路?谢谢!

[解决办法]
到codeproject上找找吧
[解决办法]
看你需求了,是需要一个独立滚动条,还是像Edit、ListCtrl那样的内嵌滚动条
独立滚动条自绘相对简单,继承下CScrollBar然后Draw就可以了
内嵌滚动条并不是一个控件,而是类似于DirectUI的东西,实在非客户区上绘制的,没有句柄,就是一块区域响应鼠标消息实现滚动条的所有功能。
[解决办法]
这个你还是看自己需求。。。
内嵌和外嵌,这个有很大区别的。。

codeproject 上你可以搜索看看。。

读书人网 >VC/MFC

热点推荐