大家好, 我希望获得当前窗口背景色的RGB值,请问该如何获得呢?谢谢!

解决方案 »

  1.   


    Option Explicit
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Sub Command1_Click()
        Dim lngFormBackColor As Long
        Dim lngR As Long
        Dim lngG As Long
        Dim lngB As Long
        lngFormBackColor = Me.BackColor
        lngR = lngFormBackColor Mod &H100
        lngG = (lngFormBackColor \ &H100) Mod &H100
        lngB = (lngFormBackColor \ &H10000) Mod &H100
        Debug.Print "背景色是:&H" & Hex(lngFormBackColor)
        Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")"
    End SubPrivate Sub Form_Load()
        Me.BackColor = &H808090
    End Sub
      

  2.   

    得到的结果显示 -241 -255 -255 ;我暂且将RGB(241,255,255)带入,发现与原来的色彩还是不符合啊?
      

  3.   

    默认的那个颜色是ARGB,比如:&H80808080,含义如下;
    第一个80是透明度,0是完全不透明,FF是完全透明
    第二个80是R
    第三个80是G
    第四个80是B
      

  4.   


    老兄弄错了:Option Explicit
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Sub Command1_Click()
        Dim lngFormBackColor As Long
        Dim lngR As Long
        Dim lngG As Long
        Dim lngB As Long
        lngFormBackColor = Me.BackColor
        lngR = lngFormBackColor AND &HFF
        lngG = (lngFormBackColor AND &HFF00) \ 256
        lngB = (lngFormBackColor AND &HFF0000) \ 65536
        Debug.Print "背景色是:&H" & Hex(lngFormBackColor)
        Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")"
    End Sub'这个算法还有点问题,对应windows的系统颜色,其颜色值>&Hffff
    ff(如VB窗口的灰色为&H8000000F&)需要用一个函数转换,我忘记用哪个函数了
      

  5.   

    抱歉,的确是我错了,没有细细研究。正确的应该是这样Option Explicit
    Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
    Private Sub Command1_Click()
        Dim lngFormBackColor As Long
        Dim lngR As Long
        Dim lngG As Long
        Dim lngB As Long
        lngFormBackColor = Me.BackColor
        '如果获取的颜色是小于0的,那么他是系统颜色。必须使用GetSysColor转换
        '转换的规则是带入系统颜色的低字节,也就是系统颜色编号,来转换
        If lngFormBackColor < 0 Then lngFormBackColor = GetSysColor(lngFormBackColor And &HFF&)
        lngR = lngFormBackColor Mod &H100
        lngG = (lngFormBackColor \ &H100) Mod &H100
        lngB = (lngFormBackColor \ &H10000) Mod &H100
        Debug.Print "背景色是:&H" & Hex(lngFormBackColor)
        Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")"
    End Sub