VBA下,建了一个窗体(UserForm)调用简单的API
返回的是窗体固定位置的RGB值,怎么会在运行程序后,鼠标点击其他应用, 再触发mousemove会发生变化?
hdc每次发生变化可以理解,为什么窗体上某个点颜色的返回值怎么会变化呀?我试了在整个窗体上插个图片进去结果也是这样.
我的理解GetPixel取得的是窗体上50,100这个点的颜色,窗体本身没有变化,那取得的RGB值不应该变化呀?
Module class 代码如下:
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Colorval&, Red&, Green&, Blue&
Public Sub GetRGB(cc As Long)
Red = cc Mod 256
Green = (cc Mod 256) Mod 256
Blue = cc Mod 256 Mod 256
End Sub
窗体UserForm代码如下:
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
hdc = GetDC(UserForm)
' hdc = GetDC(0) hdc改成取得0,结果也这样.
Colorval = GetPixel(hdc, 50, 100)
Call GetRGB(Colorval)
Me.Caption = CStr(Colorval) & "Red point:" & CStr(Red) & "Green point:" & CStr(Green) & "Blue point:" & CStr(Blue) & " hdc value:" & hdc
ReleaseDC UserForm, hdc
End Sub
Private Sub UserForm_load()
Me.scalemode = 3
End Sub
直接运行结果(鼠标不去点击其他程序)
运行后,鼠标先去点击比如IE或者其他程序,再触发窗体的mousemove(注意看Red/Green/Blue point这3个值发生了变化!!!)
