Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 蒙皮MFC滚动条_C++_User Interface_Winapi_Mfc - Fatal编程技术网

C++ 蒙皮MFC滚动条

C++ 蒙皮MFC滚动条,c++,user-interface,winapi,mfc,C++,User Interface,Winapi,Mfc,前提:我需要更改MFC(拇指+轨迹+箭头)中定义的默认CScrollBar的颜色,但在做了一些研究后,我意识到这并不是一项简单的任务 问题:如果我尝试在现有的滚动条上画图会更好,还是应该从头创建一个新的滚动条控件 如果我仅限于在其上绘图,我的优势是不必管理处理滚动条其他功能的所有消息(除绘图外),但查找windows重画滚动条的所有点非常复杂,因为滚动条并非仅在OnPaint()中重画方法 如果我从头开始重做,我将不再有问题,以确定所有点的酒吧是重画。。。但另一方面,我应该从头开始重新实现所有

前提:我需要更改MFC(拇指+轨迹+箭头)中定义的默认
CScrollBar
的颜色,但在做了一些研究后,我意识到这并不是一项简单的任务

问题:如果我尝试在现有的滚动条上画图会更好,还是应该从头创建一个新的滚动条控件

  • 如果我仅限于在其上绘图,我的优势是不必管理处理滚动条其他功能的所有消息(除绘图外),但查找windows重画滚动条的所有点非常复杂,因为滚动条并非仅在
    OnPaint()中重画
    方法
  • 如果我从头开始重做,我将不再有问题,以确定所有点的酒吧是重画。。。但另一方面,我应该从头开始重新实现所有滚动条功能
我已经看过这个链接: 但是提议的方法似乎不适用于较新版本的Windows(从Vista开始)


感谢您的建议。

我们遇到了完全相同的问题,您试图透支原始滚动条是我们首先尝试的。由于一些问题,我们再次放弃了尝试,我记不清细节(没有收到所有鼠标或绘图消息,闪烁,…)。我们的解决方案是经过一些努力的,但现在起作用了:

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


第二,我们实现了一个模板类CWndCustomScrollBar,它保留了两个ccustomscrollbar,并将它们作为一个标准窗口来管理,该窗口将使用其嵌入的滚动条。然后,可以通过GetClientRetWithoutsCrollBar()方法实现免费的客户端区域,其工作方式与标准窗口类似。

您在寻找吗?WM\u CTLCOLORSCROLLBAR绝对不完整。您无法通过此更改所有滚动条元素的颜色。我担心从头开始重做滚动条并从头开始重新实现所有功能是最好的解决方案。。。非常感谢您的解释/示例,我想我将使用您的方法。