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

问题描述

我的一位客户在他的VB6应用程序的列表/网格控件中使用了MSIE 4中引入的标准flat scroll bars。现在,他想在自己的应用中实现深色主题,并且需要分别为这些扁平滚动条着色。 FlatSB_SetScrollProp WinAPI函数允许我们更改平面滚动条的颜色参数。我可以使用WSB_PROP_HBKGCOLOR / WSB_PROP_VBKGCOLOR值轻松指定阴影轴的背景颜色,但是我们需要更改其他颜色-滚动框的背景颜色,按钮上箭头的颜色等。FlatSB_SetScrollProp为我们提供了此功能为使用WSB_PROP_PALETTE值的滚动条指定自定义调色板,但我在Internet上找不到任何工作示例来说明如何做到这一点。我发现的是thisthis之类的代码段,但是显然它们不起作用。有人可以提供带有WSB_PROP_PALETTE的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和WSB_PROP_HBKGCOLOR的FlatSB_SetScrollProp实际上是唯一可以更改的滚动条。更改调色板不会改变滚动条上的其他任何元素。

确实不建议在应用程序中进一步使用调色板,在新的窗口样式中,flatsb API不再起作用。如果要使用调色板中最适合您请求的颜色的颜色,可以使用GetNearestPaletteIndex来获取逻辑调色板的条目的索引,并从中获取RGB值以用作VBKGCOLOR和HBKGCOLOR的颜色

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...