Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '定义点(Point)结构
X As Long '点在X坐标(横坐标)上的坐标值
Y As Long '点在Y坐标(纵坐标)上的坐标值
End Type
Sub PrintCursorPos()
Dim dl As Long
Dim MyPoint As POINTAPI
dl& = GetCursorPos(MyPoint) '调用函数,获取屏幕鼠标坐标
'DebugPrint "X=" & Str(MyPointX) & " and " & "Y=" & Str(MyPointY)
Label1Caption = "当前横坐标:" & Str(MyPointX)
Label2Caption = "当前纵坐标:" & Str(MyPointY)
End Sub
Private Sub Command1_Click()
Timer1Enabled = True
End Sub
Private Sub Timer1_Timer()
PrintCursorPos
End Sub
在OnMouseMove函数里设定字符变量str,定义为鼠标的x和y。然后在状态栏输出。CString str; strFormat( "%d,%d ",pointx,pointy); CStatusBar pStatus;pStatus=(CStatusBar)AfxGetApp()->m_pMainWnd ->GetDescendantWindow (ID_VIEW_STATUS_BAR);pStatus->SetPaneText (1,str);
这个好写啊。你用MFC写的话,在你的对话框类上点击右键,选择add window message handle 添加WM_LBUTTONDOWM ,这个是左键响应,或者直接在你要电击的对话框上,选择右键的 classwizard,选择messages里面的WM_LBUTTONDOWM ,添加后会有个OnLButtonDown函数,函数里面的CPoint point参数就是鼠标的位置。比如你可以判断:
if (pointx>0&&pointx<300&&pointy>0&&pointy<500&&)
{
//调用其他程序
WinExec("Notepadexe ", SW_SHOW);
}
吸使用以下几种方式获取:
1PageX/PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化
2clientX/clientY:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化
可是悲剧的是,PageX只有FF特有,IE这个悲剧没有啊T_T,所以大牛们想出了一个办法
PageY=clientY+scrollTop-clientTop;(只讨论Y轴,X轴同理,下同)
3screenX/screenY:鼠标在屏幕上的位置,从屏幕左上角开始(w3c标准)
4offsetX/offsetY:IE特有,鼠标相比较于触发事件的元素的位置,以元素盒子模型的内容区域的左上角为参考点,如果有boder,可能出现负值
5
layerX/layerY:FF特有,鼠标相比较于当前坐标系的位置,即如果触发元素没有设置绝对定位或相对定位,以页面为参考点,如果有,将改变参考坐标系,从触发元素盒子模型的border区域的左上角为参考点也就是当触发元素设置了相对或者绝对定位后,layerX和offsetX就幸福地生活在一起^-^,几乎相等,唯一不同就是一个从border为参考点,一个以内容为参考点
chrome和safari一条龙通杀!完全支持所有属性其中(offsetX和layerX都是以border为参考点)
下面这个是获取相对于屏幕的坐标
documentonmousemove=function(e){e=e e:windowevent;documentwriteln("X:"+escreenX+"Y:"+escreenY);}
其实很简单,逐行手敲,亲测可用。
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub Command1_Click()
Dim Point As POINTAPI
GetCursorPos Point
Print "鼠标横坐标为:" & PointX
Print "鼠标纵坐标为:" & PointY '打印鼠标位置坐标
End Sub
OnMouseMove的后一个参数就是鼠标的当前位置
void CTest1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnMouseMove(nFlags, point);
CPoint MousePosition = point;
}
如果作为一个命令行的程序,要获取鼠标单击事件比较麻烦。比较简单的就是用WINAPI:GetCursorPos函数直接获取鼠标的当前位置,这样可以先把鼠标移动到想知道位置的地方,然后调用那个API就可以了,例如下面这个程序每隔1秒就打印鼠标的位置:
#include <iostream>
#include <windowsh>
using namespace std;
int main(void)
{
POINT p;
while (1)
{
if (GetCursorPos(&p))
{
cout<<px<<"\t"<<py<<endl;
}
Sleep(1000);
}
return 0;
}
头文件就是多加个Windowsh就行了。
方法一:在OnMouseMove方法最前面加上局部刷新的代码:
RECT rect; //刷新区域
rectleft=800; //区域最左端
recttop=300;//区域最顶端
rectright=rectleft+100;//宽
rectbottom=recttop+30;//高
InvalidateRect(&rect);
UpdateWindow();
方法二:在文字输出(TextOut一句)前先把该区域用背景色刷一遍,用FillRect函数,即类似于dcFillRect(rect,brush);
以上就是关于VB中获得屏幕中鼠标坐标代码全部的内容,包括:VB中获得屏幕中鼠标坐标代码、VC 窗口中获取鼠标坐标、VC++里面用什么函数能获取鼠标单击后的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)