首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

鼠标双击响应的实现「建议收藏」

在Windows平台上,鼠标左键的按下、松开、快速的两次点击会产生WM_LBUTTONDOWN、WM_LBUTTONUP和WM_LBUTTONDBLCLK消息,但是Windows根据什么来区分连续的两次鼠标按键操作,是两次独立的单击,还是一次双击呢?最近在解决一个问题时,通过使用Spy++和查阅MSDN,弄清楚了这个问题。简单总结如下: Windows根据两个条件来做这个区分: (1)双击的时间间隔 这是很容易想到的。更准确的说法是这样的,两次单击会产生四个鼠标点击消息,如果第三个消息(第二次按下)和第二个消息(第一次弹起引发的WM_LBUTTONUP)间隔短于指定值,则把第三个消息处理成WM_LBUTTONDBLCLK消息;第四个消息照旧,WM_LBUTTONUP。 这个指定的时间间隔,在Windows XP SP2上缺省是0.5秒,其他操作系统可能相同。通过::GetDoubleClickTime调用可以得到这个值。 这个值是可以设置的。有两种方法设置这个值: ::SetDoubleClickTime调用,或者以SPI_SETDOUBLECLICKTIME为第一个参数调用::SystemParametersInfo。设置的结果对系统中其他的应用程序也起作用。 (2)两次鼠标击点的空间距离 在第一次点击时,Windows以击点为中心,检测一个矩形区域,如果第二次点击不落在这个区域内,那就不把第三个消息算作WM_LBUTTONDBLCLK消息。 这个矩形区域的缺省大小,在Windows XP SP2上缺省是4pt×4pt。可以以SM_CXDOUBLECLK或SM_CYDOUBLECLK为参数调用::GetSystemMetrics得到。 这个值也是可以设置的。设置的方法是通过SPI_SETDOUBLECLKWIDTH或SPI_SETDOUBLECLKHEIGHT为第一个参数来调用::SystemParametersInfo。设置的结果对系统中其他的应用程序也起作用。

02
您找到你想要的搜索结果了吗?
是的
没有找到

消息是什么_消息和信息有什么区别

大家好,又见面了,我是你们的朋友全栈君。 Windows 基于消息的模式: 一旦程序启动,它只是简单地等待发送给它的消息,然后作出相应的响应。由 Windows 本身去检测是否有 一个键被按下或是否有鼠标移动。当这类事件发生时,Windows 就向程序发送一条预定义的消息,告诉它发 生了什么。程序一般都有响应消息或不理睬消息的选项。   ·DOS 过程模式: C++ 代码通常是线性地执行,也就是从程序的开头到结束,每个时刻执行一行代码,或者转移到某行代 码,或者循环执行,以这几种方式运行各段代码。程序要想知道发生了什么,必须通过调用基于中断的子程 序。这些子程序是操作系统内部建立或由硬件实现的。子程序返回时,报告是否有一个键被按下或鼠标做了 移动。

03

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券