游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3298|回复: 6

[求教]DirectX中鼠标点击检测的问题

[复制链接]

1

主题

3

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2004-3-11 08:02:00 | 显示全部楼层 |阅读模式
请问如何在DirectX中实现对一次完整的鼠标点击的检测?

也就是说不只是检测某个鼠标键是否按下,而要检测其是否完成一次点击,也就是按下再松开的过程。

打个比方来说,需要制作一个按钮,当鼠标在它上面按下的时候,它并不是立即做出反应,而是一定要等到鼠标在它上面再松开的时候才会反应。并且如果鼠标在它上面按下了,然后将鼠标移出这个按钮的区域再松开,那么按钮不会对这次点击做出反应。其实Windows中大多数的按钮都是这样的性质,但我实在不知道应该如何实现这种检测,DirectX中的GetDeviceState和GetDeviceData好像只能检测某鼠标键是否按下,而不是检测一次完整的点击。

我是DirectX的初学者,问题可能比较初级,还希望高手不吝赐教,万分感激!!多谢!!

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2004-3-11 10:31:00 | 显示全部楼层

Re:[求教]DirectX中鼠标点击检测的问题

我都是用很笨的办法
有一个bool跟踪按键状态,每一帧检查,然后如果发现状态改变发出相应事件。

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2004-3-11 11:21:00 | 显示全部楼层

Re:[求教]DirectX中鼠标点击检测的问题

要么响应消息循环里的鼠标消息。

要么使用DirectInput里的MOUSE的BUFFER模式。

1

主题

3

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2004-3-11 11:40:00 | 显示全部楼层

Re:[求教]DirectX中鼠标点击检测的问题

谢谢各位的帮助。

采用变量记录上一次鼠标的按键状态,现在可以让按钮在弹起时再反应了,可是当鼠标在按钮A上按下不放,然后再移到按钮B上面,这时候按钮B会被按下,如果再在按钮B上放开鼠标,按钮B就会反应。这和windows界面常规的按钮行为也不符合,按说已经在按钮A上按下鼠标,那么A就应该一直是输入焦点,除非松开鼠标按键,否则其他按钮不应该有反应呀。

我考虑过每一个按钮都使用一个变量来保存是否获得焦点,然后在判断每个按钮状态的时候,同时检测其他的按钮是否已经获得焦点,这样也许能解决这个问题。可是这样做好象太麻烦了,而且通用性不好,有更好的方法吗?

还有就是怎么样获得鼠标双击?难道要用WINDOWS的消息处理?那样好像太麻烦了,是不是有好些的方法?

DIRECT INPUT的BUFFER模式大概怎么用?是用GetDeviceData?关于这个函数的MSDN说明实在太少了,看不明白。

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2004-3-11 11:50:00 | 显示全部楼层

Re:[求教]DirectX中鼠标点击检测的问题

“我考虑过每一个按钮都使用一个变量来保存是否获得焦点”
我觉得不错 可以实现一个“可以被点击”的基类,负责翻译鼠标事件。
然后像按键阿选择匡阿的都继承这个类,我觉得通用性还蛮强的。
如果让我写双击,我就在这个基类中每次按键等待一个非常小的时间,如果又有点击事件就判定为双击,否则发出单击事件。
应该有更好的API吧 我就不了解了
[em1]

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2004-3-11 17:22:00 | 显示全部楼层

Re:[求教]DirectX中鼠标点击检测的问题

DX SDK里有说。

1

主题

3

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2004-3-12 06:45:00 | 显示全部楼层

Re:[求教]DirectX中鼠标点击检测的问题

谢谢大家的帮助,我已经解决第一个问题了,正在考虑怎么解决双击。
可能可以记录每两次邻近的单击时间,然后计算差值来判断,理论上应该可以解决。

不知道是否在API里有更好的解决方法,我会再看看DX SDK的,多谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-15 17:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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