更改平面滚动条的颜色(FlatSB_SetScrollProp功能中的自定义调色板)



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


我过去在平面滚动条中使用调色板时使用的一些VB6源代码:

Private Type PALETTEENTRY
peRed As Byte
peGreen As Byte
peBlue As Byte
peFlags As Byte
End Type
Private Type LOGPALETTE
palVersion As Integer
palNumEntries As Integer
palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors.
End Type
Private Declare Function CreatePalette Lib "gdi32" (ByRef lpLogPalette As LOGPALETTE) As Long
Private Const WSB_PROP_PALETTE = &H800&
Private Declare Function FlatSB_SetScrollProp Lib "comctl32.dll" (ByVal hWnd As Long, ByVal Index As Long, ByVal newValue As Long, ByVal fRedraw As Boolean) As Long
Friend Sub SetCustomPalette()
Dim LogPal As LOGPALETTE
Dim hPal As Long

LogPal.palNumEntries = 256
LogPal.palVersion = &H300

Dim iPalEntry As Long
For iPalEntry = 0 To 255
LogPal.palPalEntry(iPalEntry).peRed = iPalEntry
'LogPal.palPalEntry(iPalEntry).peGreen = iPalEntry
'LogPal.palPalEntry(iPalEntry).peBlue = iPalEntry
'LogPal.palPalEntry(iPalEntry).peFlags = 4
Next

hPal = CreatePalette(LogPal)

Dim lRes As Long
lRes = FlatSB_SetScrollProp(m_hWnd, WSB_PROP_PALETTE, hPal, True)
End Sub

我检查了CreatePalette和FlatSB_SetScrollProp调用的结果——它们都成功了。我尝试只填充peRed组件或调色板项的所有R/G/B,尝试了peFlags的所有可用值,但没有任何帮助。

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

WSB_PROP_VBKGCOLOR的FlatSB_SetScrollProp和WSB_PROB_HDBKGCOLOR实际上是唯一可以为滚动条更改的。如果更改了调色板,则不会更改滚动条上的任何其他元素。

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

最新更新