需要 MFC 自定义滚动条的建议
Posted
技术标签:
【中文标题】需要 MFC 自定义滚动条的建议【英文标题】:Suggestion wanted for MFC custom scrollbars 【发布时间】:2018-06-04 15:04:03 【问题描述】:我想为自定义绘制的绘图制作自己的滚动条,比如这张图片,最好的方法是什么?
滚动条应该:
仅当鼠标悬停在其上时可见(淡入/淡出) 成为绘图 x/y 轴的一部分,如图所示 没有任何箭头按钮,只有拇指比普通滚动条细你会建议:
从头开始创建所有内容,处理分页、滚轮等。
尝试继承CScrollBar自己画图?
根据我的阅读,在MFC中自定义滚动条并不是很容易,例如here)
【问题讨论】:
您的屏幕截图中已经有一个滚动条。你为什么不自定义呢?除此之外,我们没有任何信息,您希望滚动条托管在什么控件中。 您实际上只有选项 1,因为标准滚动条不支持所有者绘制,并且还绘制在WM_PAINT
/ WM_NCPAINT
之外,如链接文章中所述。选项 1 不会那么复杂,但仍然需要付出很大的努力。尝试从CScrollBar
继承不会减少工作量;相反,伪造 owner-draw 将是一个不平凡的“hack”,并且更难维护。对于淡入/淡出效果,请查看Buffered Animation API。
【参考方案1】:
首先,这些必须是滚动条(或其他)控件,而不是窗口滚动条(用于滚动窗口)。
其次,“在 MFC 中自定义滚动条不是很容易”的说法只是部分正确。 MFC 是 Windows API 的“瘦包装器”,因此您最好参考 Windows 滚动条控件的文档。
然后是 CScrollBar 类,但看了一眼,确实,它并没有提供比 Windows 滚动条更多的东西。至于您发布的链接中的示例是一个新的(自定义)控件(自己绘制所有内容),即字面意思是“从头开始”,而不是从 CScrollBar 继承任何东西。
因此,您必须查看 Windows 滚动条控件及其提供的功能。看了一下,看到的东西很少。不幸的是,似乎没有所有者绘制功能。您可以处理WM_CTLCOLORSCROLLBAR
消息,但这仅允许您更改颜色。
根据文档,只有背景颜色。这似乎是唯一可能的自定义,除了 SBM_ENABLE_ARROWS 消息,它可以隐藏箭头。并且没有褪色效果。如果这些对您来说已经足够了,您可以尝试使用 Windows/MFC 滚动条,否则尝试自己编写。
【讨论】:
以上是关于需要 MFC 自定义滚动条的建议的主要内容,如果未能解决你的问题,请参考以下文章