用GetPixel取得窗体(UseForm)上某个点的RGB值, 运行后发现触发mousemove前,鼠标点击了其他程序(如IE) 最后RGB返回值会出现变化

baneit319 2020-09-13 12:12:27
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个值发生了变化!!!)
...全文
185 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
baneit319 2020-09-14
哪位指点一下,万分感谢!
  • 打赏
  • 举报
回复
发帖
API
加入

1472

社区成员

VB API
社区管理员
  • API
申请成为版主
帖子事件
创建了帖子
2020-09-13 12:12
社区公告
暂无公告