如何获得鼠标当前位置的RGB值?

litaoa 2003-03-02 08:22:53
在实现过程中,我有这几个问题,所以请教各们DX.
我通过将picture的scalemode改成3-pixe可以成功的通过鼠标当前的位置得到picture当前鼠标所指的点的RGB值。如:
Private Sub P1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.BackColor = GetPixel(P1.hdc, X, Y)
End Sub
只要鼠标移到picture上的上面。label2的背景色就会变成鼠标所指。
可是当获得一个正在运行窗口一个点的RGB值时。怎么获得呢?

当这个正在运行的窗口上有好多种控件时,又怎么获得呢,
谢谢各们DX
...全文
227 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fling_boy 2003-03-02
  • 打赏
  • 举报
回复
还有一点要注意,窗口内点的坐标有两种,一种是相对窗口的,就是我们平时在窗体内用的
txt.top top.left 等,还是一种是相对屏幕的(X,Y),上面WindowFromPoint 用到的就是相对屏幕的,他们之间的转换函数是:

ClientToScreen
ScreenToClient






ClientToScreen

VB声明
Declare Function ClientToScreen Lib "user32" Alias "ClientToScreen" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
说明
判断窗口内以客户区坐标表示的一个点的屏幕坐标
返回值
Long,非零表示成功,零表示失败
参数表
参数 类型及说明
hwnd Long,判断客户区坐标时那个窗口的句柄
lpPoint POINTAPI,用hwnd窗口的客户区坐标表示的点,这个参数会包含屏幕坐标系统中相同的点

ScreenToClient

VB声明
Declare Function ScreenToClient Lib "user32" Alias "ScreenToClient" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
说明
判断屏幕上一个指定点的客户区坐标
返回值
Long,非零表示成功,零表示失败
参数表
参数 类型及说明
hwnd Long,一个窗口的句柄,该窗口定义了要使用的客户区坐标系统
lpPoint POINTAPI,屏幕坐标系统中包含了屏幕点的结构。这个函数会随同相应的客户区坐标(由hwnd决定)载入结构

Top

fling_boy 2003-03-02
  • 打赏
  • 举报
回复
Private Type POINTAPI
x As Long
y As Long
End Type


dim tPoint as POINTAPI
dim lHwnd as long,lDC as long

GetCursorPos tPoint

lHwnd =WindowFromPoint( tPoint.x,tpoint.y)
lDC=GetDC (lHwnd )
Label2.BackColor = GetPixel(lDC,tPoint.x,tpoint.y)


GetCursorPos

VB声明
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
说明
获取鼠标指针的当前位置
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
lpPoint POINTAPI,随同指针在屏幕像素坐标中的位置载入的一个结构


WindowFromPoint

VB声明
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
说明
返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口
返回值
Long,包含了指定点的窗口的句柄。如指定的点处没有窗口存在,则返回零
参数表
参数 类型及说明
xPoint Long,x点值
yPoint Long,y点值


GetDC

VB声明
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
说明
获取指定窗口的设备场景
返回值
Long,指定窗口的设备场景句柄,出错则为0
参数表
参数 类型及说明
hwnd Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC
注解
若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC


Top

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧