请问怎样才能改变VB6滚动条的颜色?
哪位高手能指点一下.

解决方案 »

  1.   

    Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Const PBM_SETBARCOLOR = &H409
    Public Const PBM_SETBKCOLOR = &H2001 PostMessage ProgressBar1.hwnd, PBM_SETBARCOLOR, 0,RGB(128,154,35)
     PostMessage ProgressBar1.hwnd, PBM_SETBKCOLOR, 0, RGB(0, 0, 0)
      

  2.   

    请问zq972,上面一段代码要放在下面程序中的什么位置?
    模块:
    Option Explicit
    Public Type POINTL
        x As Long
        y As Long
    End Type
    Declare Function CallWindowProc _
        Lib "user32" Alias "CallWindowProcA" _
            (ByVal lpPrevWndFunc As Long, _
            ByVal hwnd As Long, _
            ByVal Msg As Long, _
            ByVal wParam As Long, _
            ByVal lParam As Long) As LongDeclare Function SetWindowLong _
        Lib "user32" Alias "SetWindowLongA" _
            (ByVal hwnd As Long, _
            ByVal nIndex As Long, _
            ByVal dwNewLong As Long) As LongDeclare Function SystemParametersInfo _
        Lib "user32" Alias "SystemParametersInfoA" _
            (ByVal uAction As Long, _
            ByVal uParam As Long, _
            lpvParam As Any, _
            ByVal fuWinIni As Long) As Long
        
    Declare Function ScreenToClient Lib "user32" _
    (ByVal hwnd As Long, xyPoint As POINTL) As LongPublic Const GWL_WNDPROC = -4
    Public Const SPI_GETWHEELSCROLLLINES = 104
    Public Const WM_MOUSEWHEEL = &H20A
    Public WHEEL_SCROLL_LINES As Long
          
    Global lpPrevWndProc As LongPublic Sub Hook(ByVal hwnd As Long)
        lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
        Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, WHEEL_SCROLL_LINES, 0)
        If WHEEL_SCROLL_LINES > Form1.VScroll1.Max Then
            WHEEL_SCROLL_LINES = Form1.VScroll1.Max
        End If
    End SubPublic Sub UnHook(ByVal hwnd As Long)
        Dim lngReturnValue As Long
        lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)
    End SubFunction WindowProc(ByVal hw As Long, _
            ByVal uMsg As Long, _
            ByVal wParam As Long, _
            ByVal lParam As Long) As Long
        Dim pt As POINTL
        Select Case uMsg
            Case WM_MOUSEWHEEL
                If wParam = -7864320 Then
                    If Form1.VScroll1.Value <= Form1.VScroll1.Max - 100 Then
                        Form1.VScroll1.Value = Form1.VScroll1.Value + 100
                    Else
                        Form1.VScroll1.Value = Form1.VScroll1.Max
                    End If
                ElseIf wParam = 7864320 Then
                    If Form1.VScroll1.Value >= 100 Then
                        Form1.VScroll1.Value = Form1.VScroll1.Value - 100
                    Else
                        Form1.VScroll1.Value = 0
                    End If
                End If
            Case Else
                WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
        End Select
    End FunctionPublic Function HIWORD(LongIn As Long) As Integer
      HIWORD = (LongIn And &HFFFF0000) \ &H10000
    End FunctionPublic Function LOWORD(LongIn As Long) As Integer
          LOWORD = LongIn And &HFFFF&
    End Function窗体中:
    Private Sub Form_Load()
        Hook Me.hwnd
    End SubPrivate Sub Form_Resize()
        If Frame1.Height > Me.Height Then
            VScroll1.Visible = True
        Else
            VScroll1.Visible = False
        End If
        If Frame1.Width > Me.Width Then
            HScroll1.Visible = True
        Else
            HScroll1.Visible = False
        End If
        HScroll1.Left = 0
        HScroll1.Top = Me.ScaleHeight - HScroll1.Height
        VScroll1.Left = Me.ScaleWidth - VScroll1.Width
        VScroll1.Top = 0
        HScroll1.Width = Me.ScaleWidth
        VScroll1.Height = Me.ScaleHeight
        If VScroll1.Visible = True Then
            If HScroll1.Visible = True Then
               HScroll1.Width = Abs(Me.ScaleWidth - VScroll1.Width)
               VScroll1.Height = Abs(Me.ScaleHeight - HScroll1.Height)
            End If
        End If
        HScroll1.Max = (Frame1.Width - Me.Width) + 3 * VScroll1.Width
        VScroll1.Max = (Frame1.Height - Me.Height) + 3 * HScroll1.Height
         HScroll1.ZOrder
        VScroll1.ZOrder
        End SubPrivate Sub Form_Unload(Cancel As Integer)
        UnHook Me.hwnd
    End SubPrivate Sub HScroll1_Change()
        Frame1.Left = -HScroll1.ValueEnd SubPrivate Sub VScroll1_Change()
        Frame1.Top = -VScroll1.Value
    End Sub
      

  3.   

    自定义颜色不清楚,但使用系统颜色ms有文档论述:http://support.microsoft.com/kb/244236/zh-cn 
    如何在 WindowsNT 下 ScrollBars 上使用系统颜色注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。
    文章编号 : 244236 
    最后修改 : 2004年7月13日 
    修订 : 1.0 
    本页概要更多信息分步示例参考
    概要
    虽然 Windows 9.x 下要使用系统颜色背景色的水平和垂直滚动条控件是白色下 MicrosoftWindowsNT,。 要 WindowsNT, 使用系统颜色非常需要子类窗体以防止 WM_CTLCOLORSCROLBAR 窗口消息由默认窗口过程 ( WindowProc ) 对表单处理。 警告 : 失败到 unhook 窗口之前其即将出现毁坏导致应用程序错误、 无效页错误和数据丢失。 这是, 原因在于不再被指向新 WindowProc 函数存在, 但窗口已不通知的更改。 始终 unhook sub-classed 窗口卸载 sub-classed 表单或退出应用程序时。 在调试使用此技术中 Microsoft VisualBasic 开发环境 (IDE) 的应用程序时这一点尤其重要。 按 END 按钮或者从 运行 选择 END 菜单没有 unhooking 可能导致无效页面错误并且关闭 MicrosoftVisualBasic。 
     回到顶端 更多信息
    通过把消息发送到窗口由各个应用程序创建 Windows 控件应用程序。 当它是时间来重绘, 当按下鼠标按钮时, 和所有窗口需要知道为了正确操作其他信息这些消息通知目标窗口。 因此, 小应用程序由函数处理这些消息 (称为 WindowProc )。 创建窗口, 系统知道如何发送邮件时用系统注册此函数。 当控件是要绘制 WM_CTLCOLORSCROLLBAR 消息发送到父窗口的滚动条控件。 通过响应此消息, 父窗口可用于设备上下文句柄 (hDC) 栏控件的滚动背景颜色设置。 如果此消息不传送到 WindowProc , 截取和滚动条设置为系统颜色。 以下示例由简单窗体窗体包含两 CommandButtons 和垂直滚动条。 截获 WM_CTLCOLORSCROLLBAR 消息并丢弃它。 备注 : &#8226; 滚动条控件闪烁除非至少一个其他控件是 sited 窗体上。 对 VScrollBar TabStop 属性设置为 False 防止其获得焦点。  
    &#8226; 通常最好来启动挂钩 _ Load 过程中和从 Form_Unload 过程结束它。 在此示例, CommandButtons 以便 VScrollBar 中差别是明显更容易使用。   回到顶端 分步示例
    1. 启动新 VisualBasic 标准 EXE 工程。 默认情况下创建 Form 1。  
    2. 向 Form 1 添加两个 CommandButtons 和 VScrollBar。 将对 VScrollBar1 TabStop 属性设置为 False。  
    3. 在 项目 菜单, 单击要 BAS 模块添加到项目 添加模块 。  
    4. 将以下代码添加到 Module 1 的 GeneralDeclarations 部分:Option ExplicitDeclare Function CallWindowProc Lib "user32" Alias _
     "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, ByVal Msg As Long, _
     ByVal wParam As Long, ByVal lParam As Long) As LongDeclare Function SetWindowLong Lib "user32" Alias _
     "SetWindowLongA" (ByVal hwnd As Long, _
     ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const GWL_WNDPROC = -4
    public Const WM_CTLCOLORSCROLLBAR = 311Public Sub Hook()
       lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
       AddressOf WindowProc)
    End SubPublic Sub Unhook()
       Dim temp As Long
       temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
    End SubFunction WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
                        ByVal wParam As Long, ByVal lParam As Long) As Long
       If uMsg <> WM_CTLCOLORSCROLLBAR Then
          Debug.Print uMsg, hw
          WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
       End If
    End Function

     
    5. 以下代码添加到 Form 1 的 GeneralDeclarations 部分:Option ExplicitDim lpPrevWndProc As Long
    Dim gHW As LongPrivate Sub Form_Load()
       gHW = Me.hwnd
       Command1.Caption = "Hook"
       Command2.Caption = "Unhook"
    End SubPrivate Sub Command1_Click()
       Hook
       VScroll1.Refresh
    End SubPrivate Sub Command2_Click()
       Unhook
    End Sub

     
    6. 运行项目并单击 钩 按钮到挂钩窗体。 观察, 滚动条更改从白皮书为系统颜色。  
    7. 单击 Unhook 按钮, 然后终止程序。  
      

  4.   

    滚动条就是指如同IE浏览器右边的兰色滚动条.
    即问窗体中的HScroll1和 VScroll1,其肤色的设置,