需要 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 自定义滚动条的建议的主要内容,如果未能解决你的问题,请参考以下文章

mfc滚动条的相关问题

求教:关于MFC控件中的滚动条事件........

自定义滚动条

如何用 CSS 改变滚动条的位置?

MFC 控件编程之水平滚动条跟垂直滚动条

用MFC画滚动条的小问题