c++ - 使MFC滚动条蒙皮

标签 c++ user-interface winapi mfc

前提:我需要更改MFC中定义的默认CScrollBar的颜色(拇指+轨迹+箭头),但是经过研究后,我意识到这并不是一件容易的事。

问题:如果尝试在现有滚动条上绘制,还是应该从头开始创建新的滚动条控件会更好?

  • 如果我仅限于绘画,则我的优势是不必管理所有涉及滚动条其他功能的消息(除了图形),但是要找到所有要点非常复杂Windows重新绘制条形图的地方,因为滚动条不会仅在OnPaint()方法中重绘。
  • 如果我从头开始重做,我将不再遇到确定重新绘制栏的所有点的问题……但是,另一方面,我应该从头开始重新实现所有滚动条功能。

  • 我已经看过此链接:
    https://www.codeproject.com/Articles/14724/Replace-a-Window-s-Internal-Scrollbar-with-a-custo
    但是建议的方法似乎不适用于Windows的较新版本(从Vista开始)。

    任何建议表示赞赏,在此先感谢。

    最佳答案

    我们遇到了完全相同的问题,而您尝试覆盖原始滚动条的尝试是我们首先尝试的。由于某些问题,我们再次放弃了该尝试,我不记得很详细(未收到所有鼠标或绘制消息,闪烁,...)。我们的解决方案需要一些努力,但现在可以使用:

    我们首先实现了一个CCustomScrollBar类,它不是从CScrollBar派生的,因为CScrollBar只是Windows实现的包装,并且重写OnPaint()并不完美。是的,所有事情都必须从头开始实现。

    其次,我们实现了一个模板类CWndCustomScrollBar,该类保留了两个CCustomScrollBars并对其周围的所有对象进行管理,就像标准窗口将使用其嵌入式滚动条一样。然后可以通过GetClientRectWithoutScrollBar()方法实现免费的客户区域,使其工作与标准窗口相似。

    关于c++ - 使MFC滚动条蒙皮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59047942/

    相关文章:

    c++ - boost odeint 函数参数太多

    Java Blackjack GUIpaintComponentdrawImage不显示所有纸牌

    windows - 如何以编程方式更改默认声音播放设备?

    c++ - 暂停低级 Hook 的最佳方法(winapi)

    java - J2ME 表单布局

    java - 如何使用 JNI 获取浏览器上当前 Activity 选项卡的进程 ID

    c# - 如何进行异地/云文件同步

    c# - C# 中的静态全局变量具有文件作用域?

    c++ - 刷新缓存以防止基准测试波动

    java - 使用 JButton 和 JTabbedPane 从 JTextArea 获取文本