Winapi 更改平面滚动条的颜色(FlatSB_SetScrollProp函数中的自定义调色板)

Winapi 更改平面滚动条的颜色(FlatSB_SetScrollProp函数中的自定义调色板),winapi,scrollbar,color-palette,flat,backcolor,Winapi,Scrollbar,Color Palette,Flat,Backcolor,我的一位客户在他的VB6应用程序的列表/网格控件中使用MSIE 4中引入的标准。现在他想在他的应用程序中实现一个黑色主题,并需要分别为这些平面滚动条上色。WinAPI函数允许我们更改平面滚动条的颜色参数。我可以用WSB_PROP_HBKGCOLOR/WSB_PROP_VBKGCOLOR值轻松指定着色轴的背景色,但我们需要更改其他颜色-滚动框的背景色、按钮上箭头的颜色,等等。FlatSB_SetScrollProp为我们提供了使用WSB_PROP_调色板值为滚动条指定自定义调色板的能力,但我在互联

我的一位客户在他的VB6应用程序的列表/网格控件中使用MSIE 4中引入的标准。现在他想在他的应用程序中实现一个黑色主题,并需要分别为这些平面滚动条上色。WinAPI函数允许我们更改平面滚动条的颜色参数。我可以用WSB_PROP_HBKGCOLOR/WSB_PROP_VBKGCOLOR值轻松指定着色轴的背景色,但我们需要更改其他颜色-滚动框的背景色、按钮上箭头的颜色,等等。FlatSB_SetScrollProp为我们提供了使用WSB_PROP_调色板值为滚动条指定自定义调色板的能力,但我在互联网上找不到任何显示如何执行此操作的工作示例。我发现的是像和这样的代码片段,但显然它们不起作用。有人能提供一个带有WSB_道具调色板的FlatSB_SetScrollProp的工作样本吗


我曾经在平面滚动条中使用选项板的一些VB6源代码:

专用类型选项板条目
字节
peGreen作为字节
peBlue作为字节
将标记作为字节
端型
专用类型日志调色板
作为整数的版本
整数形式的粒子数
触诊法(255)作为调色板输入“足够256色”。
端型
私有声明函数CreatePalette Lib“gdi32”(ByRef lpLogPalette作为LOGPALETTE)的长度为
专用常量WSB_属性调色板=&H800&
私有声明函数FlatSB_setscorlprop Lib“comctl32.dll”(ByVal hWnd为Long,ByVal Index为Long,ByVal newValue为Long,ByVal fRedraw为Boolean)为Long
Friend子集CustomPalette()
将LogPal调暗为LOGPALETTE
暗淡的hPal如长
LogPal.palNumEntries=256
LogPal.palVersion=&H300
暗淡的瞳孔
对于iPalEntry=0到255
LogPal.palPalEntry(iPalEntry).peRed=iPalEntry
'LogPal.palPalEntry(iPalEntry).peGreen=iPalEntry
'LogPal.palPalEntry(iPalEntry).peBlue=iPalEntry
'LogPal.palPalEntry(iPalEntry).peFlags=4
下一个
hPal=CreatePalette(LogPal)
暗淡的lRes和长的一样
lRes=FlatSB_SetScrollPropert(m_hWnd,WSB_PROP_调色板,hPal,真)
端接头
我检查了CreatePalette和FlatSB_SetScrollProp调用的结果——它们都成功了。我尝试只填充peRed组件或调色板条目的所有R/G/B,尝试了peFlags的所有可用值,但没有任何帮助


也许,我们还需要在设置调色板后更新目标窗口中的滚动条,或者做一些其他事情使其工作。欢迎对此提出任何建议或想法。

您可以在滚动条上更改WSB_PROP_VBKGCOLOR的FlatSB_SetScrollProp和WSB_PROP_HBKGCOLOR。如果更改,调色板的更改不会更改滚动条上的任何其他元素

对于应用程序,不建议进一步使用选项板,在较新的窗口样式中,flatsb API不再工作。如果您希望使用调色板中最适合所需颜色的颜色,可以使用GetNearestPaletteIndex获取逻辑调色板条目的索引,并从中获取RGB值,以用作VBKGCOLOR和HBKGCOLOR的颜色