响应双击消息的时候,总是会先响应单击消息,然后再执行双击事件的代码。如果我们编制的程序需要单击、双击时实现不同的功能,这样就很不方便了。我google了下,网上主要就是两种思路。一是,双击时先回滚撤消单击的事件。还有就是在定时器里面对时间进行判断,如果超过指定时间就执行单击代码,否则就是执行双击的代码。
不过这样做都很麻烦!有一种比较简便的办法是:在单击事件中,截获windows消息,用一个死循环检测截获的消息。如果是双击消息就直接返回,如果超过指定的时间就break跳出死循环,执行单击事件的逻辑代码。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | void CXXXXX::OnClick() { DWORD dwStart = GetTickCount(); MSG msg; while(1)//循环检索消息队列 { if(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); if(msg.message == NM_DBLCLK) return; } DWORD dwEnd = GetTickCount(); if(dwEnd - dwStart > 200) break; } //你的逻辑代码如下: // …… // …… } |
PeekMessage为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构,这里用来获取消息队列中的消息,记录到MSG结构体的变量msg中。
TranslateMessage将虚拟键消息转换为字符消息
DispatchMessage分发一个消息给窗口程序
GetTickCount就是系统运行时间,以ms为单位,通过一前一后的比较,如果大于指定的时间200ms就退出循环。这时对外的效果就表现为单击。
当然200ms也可以改为用GetDoubleClickTime得到系统的双击速度,不过如果这个速度比较慢的话, 单击、双击效果就不太好了!表现就是单击了过几秒才会反应~ 所以还是推荐用固定的时间,比如200ms、300ms.
在双击事件里面就不需要再额外添加代码了,只要把单击事件的代码弄成上面那样就行了。


嗯,这是放在什么上的,网站上的?
软件
我也看不懂 呼呼
:Hi: :Hi:
你也才知道啊, :巨汗:
看不懂的围观一下。
热烈地 :欢迎:
总结的不错,很实用~
怎么看你都像灌水的,哈哈
:高兴: 高深。。。不懂
VC++,哈哈
完全地看不懂。
牛人,膜拜之。
你不是在学Windows程序设计吗?这个你也用得上的。这个不难理解的~
你学到什么程度了?你可以试一下。同时添加单击、双击的响应,默认情况下执行双击事件的时候,也会在这之前执行单击事件的,所以比较烦
嗯,基本看的懂。
if(dwEnd – dwStart > 200)
这条代码是不是那个符号错了?
你是说“>”号是吗?我也发现了……
昨天我用的winLiveWriter写的,今天才发现大于号被转义了
这个吗……
完全不懂!!!
:Hi: :Hi: :Hi: :Hi: :Hi:
表示看不明白。
通俗点说,就是双击的时候如何避免不执行单击的动作
不错不错,学习了!
我只会做网站 不会做软件 哈哈
我就是不会做网站,所以走的软件这条路……
这个对于我太专业,看你挂上GG的广告了,支持下。
1、这个是我自己申请的号哦~
以前有代理申请过,不过还是自己的号好啊!!!哈哈
2、你的广告呢?不见了
哦,不好意思,我把adblock打开了,怪不得没看见广告……
汗……
1、为什么到你那儿留不了言了?
2、偶尔,我给你点几下百度的广告,你帮我点下谷歌的广告。这个想法不错哦~
GG广告已经被我快放弃了,百度的也是,我谷歌的PIN码申请都快2个月了,还没寄过来。
对了,瓜哥,你的空间在哪买的?我的博客空间商说支持Jmail。我也不懂,你知道Jmail能收发邮件吗?不能发送回复通知邮件很让人无语。。。
1、只要账户里面的钱还在,晚一点有什么关系呢?
2、Jmail,以前听说过,现在想不起什么意思了……你的空间支持smtp吗?如果支持还可以用一个公共邮箱来代发邮件。
我用的是老薛主机,一个卖米国主机的代理商,服务很好,300M空间,50元/年,速度还行吧
可以去看看:http://my.laoxuehost.com/aff.php?aff=163
购买了,我就可以得到10%的佣金了,呵呵
小坐一会
:欢迎: :欢迎: :欢迎: :欢迎:
300M 50元/年啊,这速度相对与美国很不错了。我博客是国内的,论坛也是美国的。以前500M是 120元,后来升级到1G是200元了。。。
我先以为我博客便宜了,是100M,39元,不过经常挂,你的空间会出现这种情况吗?
对了,那个SMTP的公共邮箱是怎么弄的?
1、如果是emlog博客的话,有插件可以实现~ Php我也不懂,呵呵
2、为什么博客和论坛不放在一起?域名和数据库有限制?ps.我的空间放了三个网站,一个论坛,哈哈
我的空间有时是会遇到一些问题,不过老薛的服务很好。只要你给他说了,他就立即去解决了
C瓜哥内涵了 凡是遇到你的技术文章我就不懂了 飘过~~~ :欢迎:
:可爱: :可爱: :可爱: :可爱: :Hi:
这个,我就知道鼠标双击单击什么的……
这个对于数学老师来说已经很了不起了!
明白一点点,不过是C++的,看不懂!
我全部用的windows API……
用C也是一样的
我们在学C,呵呵,不过才开始!
大一?
点点AD 嘿嘿
听说学C++的都是高手
哦,是吗?
郁闷啊,按网上说的用了几个基于SMTP的插件,结果安装都失败。。。
有的主题就集成了回复通知。
对了,瓜哥,你们这些主题哪里照的,我的那个太多人用了。想换个。
主题集成回复通知的,也需要空间支持才行啊~
我的主题用的木木的免费主题,不过需要自己动手配置。不过,他也销售全功能的主题
传说中的SimpleLine?
我看见网上的ibox这个主题还不错。
你也不知道怎么嵌套回复?点“@ – 2010 年 11 月 13 日 于 13:41 23楼”中的@即可
——-
我这个主题图片少,载入快,而且还节约流量。
嗯,看起来比较清爽。
不过那个@确实太小了,感觉还是换成回复两字比较好,我找过,没找到回复。。。。
是大一的,计算机专业 呵呵
想当初大一的时候,学校只让过四级的人开网,可是能力再强的人都要等到大一下期末的时候才能参加考试(所谓的学校的规定)……悲剧
呵呵 无奈啊 C瓜哥多大了??
貌似前一天还有人问过同样的问题……
坦白地告诉你,我已经在地球上生活了 7361天了
呵呵 不错 比我大 真的叫C瓜哥
废话
好久没聊了,最近好吗
本站征收付费链接,价格Q聊
这个我纯支持了!
:高兴: :高兴: :高兴:
突然发现脑袋不够用了!
这是我的专业啊
还是看不懂。不过应该很不错,要么你也不会推荐。
推荐?
什么啊?
我意思是说这个代码。肯定很不错。要么你也不会象大家介绍。、
技术博客当然要写点技术性的东西,一是对自己所学所想有个归纳总结,二就是给大家分享下共同学习啊~
那个什么消息机制看不懂,不过我会点谷歌广告!
哈哈
西瓜哥哥原来整的是软件啊,我晕了去。
那你以为我是干嘛的?
做软件,有前途呐
如果是软件个体户的话,确实挺有钱途的。哈哈
题目没读懂,双击是双击,单击是单击….
双击时默认会先触发单击,然后触发双击,知道了吗?
懂了 。
嗯,关注支持下!
hi~
明白了,这个是必须的
啥?
不错支持。。。一下。。c瓜哥就是厉害
一般一般世界第三,哈哈
太谦虚了。你应该说。。我认第二。。。没人敢认第一!~~
Oh,you flatter me
有新意,大家多支持。
要不要加赞助商链接?价格上Q聊
来做评价的人好多呀!呵呵……
不过之前留言的都没什么水准,呵呵
俺是搞硬件的。软件不熟。话说你右上角那个RSS订阅图标蛮个性的嘛
自己做的,哈哈