C程序中,怎样获得鼠标的坐标

C程序中,怎样获得鼠标的坐标,第1张

想要获取鼠标坐标并不容易,还是一样需要调用两个API函数GetCursorPos() 获取鼠标指针位置(屏幕坐标)然后采用ScreenToClient() 将鼠标指针位置转换为窗口坐标输出即可。上例子。

// 程序名称:通过 API 获取鼠标状态

//

#include <graphicsh>

#include <stdioh>

void main()

{

initgraph(640, 480); // 初始化绘图窗口

HWND hwnd = GetHWnd(); // 获取绘图窗口句柄

POINT point;

TCHAR s[10];

while(true)

{

GetCursorPos(&point); // 获取鼠标指针位置(屏幕坐标)

ScreenToClient(hwnd, &point); // 将鼠标指针位置转换为窗口坐标

// 获取鼠标按键状态可以用 GetAsyncKeyState 函数,这里不再详述。

// 输出鼠标坐标

sprintf(s, _T("%05d"), pointx);

outtextxy(0, 0, s);

sprintf(s, _T("%05d"), pointy);

outtextxy(0, 20, s);

// 适当延时

Sleep(10);

}

}

同样运行环境需要安装EasyX。

版本 2

支持库 spec

程序集 窗口程序集1

程序集变量 水平, 整数型

程序集变量 垂直, 整数型

程序集变量 x, 整数型

程序集变量 y, 整数型

子程序 __启动窗口_创建完毕

子程序 _按钮1_被单击

水平 = 到整数 (编辑框1内容)

垂直 = 到整数 (编辑框2内容)

鼠标移动 ()

子程序 鼠标移动

x = 取鼠标水平位置 ()

y = 取鼠标垂直位置 ()

如果真 (水平 ≠ x)

判断开始 (水平 < x)

x = x - 1

默认

x = x + 1

判断结束

如果真结束

如果真 (垂直 ≠ y)

判断开始 (垂直 < y)

y = y - 1

默认

y = y + 1

判断结束

如果真结束

标签1标题 = “x=” + 到文本 (x) + “ y=” + 到文本 (y)

设置鼠标坐标 (x, y)

如果真 (水平 ≠ x 或 垂直 ≠ y)

延迟 (10)

鼠标移动 ()

如果真结束

---------------------

版本 2

DLL命令 设置鼠标坐标, 整数型, "user32dll", "SetCursorPos", 公开, 非零表示成功,零表示失败

参数 水平位置, 整数型, , 鼠标指针在屏幕像素坐标系统中的水平位置

参数 垂直位置, 整数型, , 鼠标指针在屏幕像素坐标系统中的垂直位置

吸使用以下几种方式获取:

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);}

获取鼠标当前位置只需:pageX、pageY即可。

具体步骤如下:

1、新建一个html代码页面,在这个html页面找到<body>,然后在这个<body>里创建一个用来显示坐标位置的<div>,并给这个<div>添加一个id。

创建<div>的代码:<div id="point-loc"></div>

2、使用pageX、pageY获取鼠标当前位置。在<title>标签后面新建一个<script>,创建鼠标移动时获取鼠标当前的位置。

js代码:<script type="text/javascript">

documentonmousemove = function(e){

var loc = "当前位置 x:"+epageX+",y:"+epageY

documentgetElementById("point-loc")innerHTML = loc;

}

</script>

3、保存html后使用浏览器打开即可得到鼠标位置

使用以上方法即可获取鼠标位置哦。

版本 2\x0d\支持库 spec\x0d\\x0d\程序集 窗口程序集1\x0d\程序集变量 水平, 整数型\x0d\程序集变量 垂直, 整数型\x0d\程序集变量 x, 整数型\x0d\程序集变量 y, 整数型\x0d\\x0d\子程序 __启动窗口_创建完毕\x0d\\x0d\子程序 _按钮1_被单击\x0d\\x0d\水平 = 到整数 (编辑框1内容)\x0d\垂直 = 到整数 (编辑框2内容)\x0d\鼠标移动 ()\x0d\\x0d\子程序 鼠标移动\x0d\\x0d\x = 取鼠标水平位置 ()\x0d\y = 取鼠标垂直位置 ()\x0d\如果真 (水平 ≠ x)\x0d\ 判断开始 (水平 < x)\x0d\ x = x - 1\x0d\ 默认\x0d\ x = x + 1\x0d\ 判断结束\x0d\\x0d\如果真结束\x0d\如果真 (垂直 ≠ y)\x0d\ 判断开始 (垂直 < y)\x0d\ y = y - 1\x0d\ 默认\x0d\ y = y + 1\x0d\ 判断结束\x0d\\x0d\如果真结束\x0d\标签1标题 = “x=” + 到文本 (x) + “ y=” + 到文本 (y)\x0d\设置鼠标坐标 (x, y)\x0d\如果真 (水平 ≠ x 或 垂直 ≠ y)\x0d\ 延迟 (10)\x0d\ 鼠标移动 ()\x0d\如果真结束\x0d\---------------------\x0d\版本 2\x0d\\x0d\DLL命令 设置鼠标坐标, 整数型, "user32dll", "SetCursorPos", 公开, 非零表示成功,零表示失败\x0d\ 参数 水平位置, 整数型, , 鼠标指针在屏幕像素坐标系统中的水平位置\x0d\ 参数 垂直位置, 整数型, , 鼠标指针在屏幕像素坐标系统中的垂直位置

class InputStatus{

int mouseX;

int mouseY;

}

InputStatus inputStatus=new InputStatus();

private final MouseMotionListener mouseMotionListener = new MouseMotionListener() {

public void mouseMoved(MouseEvent e) {

synchronized (inputStatus) {

inputStatusmouseX = egetX();

inputStatusmouseY = egetY();

}

}

public void mouseDragged(MouseEvent e) {

synchronized (inputStatus) {

inputStatusmouseX = egetX();

inputStatusmouseY = egetY();

}

}

};

然后把mouseMotionListener给add到你的窗口或者控件上就行。

InputStatus是自己写的内部类,用于存放鼠标的位置,这样在其他地方就可以用inputStatusmouseX和inputStatusmouseY来取了。synchronized是为了万一你取坐标的代码在其他线程里(你那个线程也要synchronized (inputStatus)),可以确保每次mouseX和mouseY是成对写入和成对读出的。

当然如果你是单线程的应用的话,可以不要synchronize,然后去掉inputStatus相关的代码,类的成员变量这么写

int mouseX,mouseY;

然后处理函数这么写

public void mouseDragged(MouseEvent e) {

mouseX = egetX();

mouseY = egetY();

}

这样比较简单

1在View类里设3个CPoint型变量,oldbegin,oldend用来表示移动过程中,刚才直线所在位置的起点,终点坐标,oldclick用来表示按下鼠标左键时,点击点的坐标

2在LButtonDown响应函数里,令oldclick=point,point是鼠标响应函数是参数

3在MouseMove响应函数里,把原直线擦去(擦去的方法要看你是怎么实现画直线的了,我也不知道你是怎么实现的,你自己分析吧),然后求出新的直线的两点坐标

(oldbeginx+pointx-oldclickx,oldbeginy+pointy-oldclicky),

(oldendx+pointx-oldclickx,oldendy+pointy-oldclicky),

希望对你有帮助

以上就是关于C程序中,怎样获得鼠标的坐标全部的内容,包括:C程序中,怎样获得鼠标的坐标、易语言如何实现鼠标移动到目标坐标、js怎么获得鼠标当前坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9755394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存