找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 549|回复: 2

[求助]:斑竹efan2000,如何实现CAD中鼠标屏幕坐标与Windows鼠标的位置转换?

[复制链接]
发表于 2004-4-28 13:39:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
你好,能否给个例子,谢了!

斑竹efan2000 ,这是去年向你提的问题,当时没弄清,能否给一个例子呢?谢了!

由 cyt4321 于 2003年04月23日 11:18 发表:
[VBA程序]:如何实现CAD中鼠标屏幕坐标与Windows鼠标的位置转换?

1. 在CAD中如何动态适时得到鼠标的坐标?
2. 如何用API得到鼠标在Windows中的屏幕位置数值?
3. 该数值在CAD中如何转换?
4. 在CAD中如何判断鼠标位置?在菜单条区,在图标区等区域
上述问题可能重复,我主要目的是想在VBA中通过API函数来控制和检测鼠标的当前位置,实现程序中的某些功能。谢谢各位了!

由 efan2000 于 2003年04月23日 11:57 发表:

先从第2个开始吧,API函数GetCursorPos可以返回鼠标在屏幕中的位置。
但是这个还不能解决问题,再用函数ScreenToClient将其坐标转化成相对于AutoCAD中当前文档的坐标吧。如何转化?传递当前文档的句柄给它,,ActiveDocument.Hwnd。
现在当前文档的鼠标位置有了,接下来呢,用系统变量VIEWCTR,VIEWSIZE,SCREENSIZE。这些系统变量怎么用?VIEWCTR是文档文档显示部分的中心点坐标,VIEWSIZE是当前文档显示部分的高度,它们的单位都是当前文档的坐标单位。知道了就可以求出左上角的坐标,为什么用左上角啊,因为窗口的坐标系原来在那儿。接着求出当前文档显示的宽度和高度吧,什么用处?看下面说明吧。SCREENSIZE是当前文档的以像素为单位的X坐标和Y坐标,而上面求出的鼠标位置(已经经过转换)与它的比例,再与当前文档显示的宽度和高度相乘,知道了鼠标与当前文档左上角的偏移距离了吗?
剩下的还有什么?动态,那么用API的钩子函数捕获吧,太麻烦?那么用定时器,每隔一定时间捕获一次。
其它的类似,祝你好运。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2004-4-28 22:28:20 | 显示全部楼层
这是一个简单的换化代码,可以参考一下,基本思路是这样的。

  1.   [FONT=courier new]
  2. Option Explicit

  3. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  4. Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
  5. Private Type POINTAPI
  6.     X As Long
  7.     Y As Long
  8. End Type

  9. Sub Test()
  10.     Dim p As POINTAPI
  11.     Dim ScreenSize As Variant
  12.     Dim ViewCtr As Variant
  13.     Dim ViewSize As Double
  14.     Dim Pt(0 To 2) As Double
  15.    
  16.     ScreenSize = ThisDrawing.GetVariable("SCREENSIZE")
  17.     ViewSize = ThisDrawing.GetVariable("VIEWSIZE")
  18.     ViewCtr = ThisDrawing.GetVariable("VIEWCTR")
  19.     GetCursorPos p
  20.     ScreenToClient ThisDrawing.hwnd, p
  21.     Pt(0) = ViewCtr(0) + Round((p.X - ScreenSize(0) / 2) * ViewSize / ScreenSize(1) + 0.0000000001, 8)
  22.     Pt(1) = ViewCtr(1) - Round((p.Y - ScreenSize(1) / 2) * ViewSize / ScreenSize(1) + 0.0000000001, 8)
  23. End Sub
  24.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-29 10:51:49 | 显示全部楼层
谢谢斑竹!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-29 11:26 , Processed in 0.357533 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表