首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么获得当前窗口的背景颜色的RGB值

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

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

谢谢!
[最优解释]
抱歉,的确是我错了,没有细细研究。正确的应该是这样


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


[其他解释]

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 Sub

Private Sub Form_Load()
    Me.BackColor = &H808090
End Sub


[其他解释]
引用:
VB code

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
   ……
你这个GetPixel没用起来啊
[其他解释]
引用:
引用:

VB code

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 lngFo……


没有用它
[其他解释]
得到的结果显示 -241 -255 -255 ;

我暂且将RGB(241,255,255)带入,发现与原来的色彩还是不符合啊?




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

谢谢!

[其他解释]
默认的那个颜色是ARGB,比如:&H80808080,含义如下;
第一个80是透明度,0是完全不透明,FF是完全透明
第二个80是R
第三个80是G
第四个80是B
[其他解释]
引用:
得到的结果显示 -241 -255 -255 ;

我暂且将RGB(241,255,255)带入,发现与原来的色彩还是不符合啊?
你将1楼试下再说吧,严重怀疑你搞的不是同一个窗口的背景色
[其他解释]
引用:
VB code

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
……


老兄弄错了:

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&)需要用一个函数转换,我忘记用哪个函数了

热点排行