明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5534|回复: 11

[讨论] [原创]如何判断鼠标左右键的按下和弹起?(已解决)

  [复制链接]
发表于 2009-11-1 23:24:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-11-9 2:18:07 编辑

  想在程序中实现“单击选择单个对象,按下左键不放拖动为框选(左键弹起时结束)”,但不知道如何判断鼠标左右键的按下和弹起状态?使用grread能获取左键按下和右键弹起的消息,而左键弹起和右键按下时,该函数没有任何反应。请问高手有没有解决方案?谢谢!!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-11-1 23:47:00 | 显示全部楼层
做个dvb文件,供lisp调用.简单可行可靠
 楼主| 发表于 2009-11-2 00:06:00 | 显示全部楼层
请楼上说详细点好嘛!我不太懂VB编程。
发表于 2009-11-2 18:45:00 | 显示全部楼层

修改系统变量pickdrag  即可。

发表于 2009-11-2 20:37:00 | 显示全部楼层

gread()函数可以,你看看cad的帮助文件吧

 楼主| 发表于 2009-11-3 02:13:00 | 显示全部楼层
楼上两位可能没有理解我的意思,可能是我没有表达清楚,我主要是要判断鼠标左右键的按下和弹起状态,修改系统变量pickdrag 虽然能实现单击选择单个对象,按下左键不放拖动为框选(左键弹起时结束),但不能满足我在程序中单击选择单个对象”(指选择一个对象后就自动结束选择,继续执行程序)。也就是说我想在程序中实现:根据选择方式的不同(单击或框选),自动认别是选择单个对象或多个对象。
发表于 2009-11-3 19:01:00 | 显示全部楼层
用(ssget)选择集函数,不带参数使用,你试试看能否满足要求。
 楼主| 发表于 2009-11-3 22:34:00 | 显示全部楼层
谢谢!(ssget)我用过,但不满足要求。我的重点还是在“判断鼠标左右键的按下和弹起状态”。
发表于 2009-11-3 23:19:00 | 显示全部楼层

下面的代码放在dvb文件中


Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Public Sub Test()
    ThisDrawing.SetVariable "USERI1", GetAsyncKeyState(&O1)  '左=&O1 右=&O2
End Sub

下面的是Lisp,取得左键状态。

(vla-RunMacro *acad* "工程名.模块名.Test")
(getvar "USERI1")

 楼主| 发表于 2009-11-4 02:01:00 | 显示全部楼层
谢谢版主,这个思路不错,也能查询所有键盘按键和鼠标键的状态。我也用这种思路做了一个dll文件,注册后用函数(vlax-create-object)和(vlax-invoke-method),能查到鼠标左键的按下和弹起状态,但左键弹起的消息无法及时捕获,也就无法在程序中及时响应。不知道版主有没有什么好的思路,能解决这个问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-1 21:37 , Processed in 0.189659 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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