【问题标题】:Can SPI_GETMOUSEHOVERTIME ever be zero?SPI_GETMOUSEHOVERTIME 可以为零吗?
【发布时间】:2013-12-06 18:35:40
【问题描述】:

在我的 WinForms 应用程序中,我使用的是 SystemParameters.MouseHoverTimeMilliseconds property,后者又使用 SPI_GETMOUSEHOVERTIME input parameter 调用 SystemParametersInfo function(根据 ILSpy)。

我正在使用该属性的返回值来设置我的表单中某些计时器的间隔。

这一切都很好。

现在我问自己这是否不够,因为在某些“奇怪”系统上它可能为零(或更少)。在这种情况下,我必须提供一个非零后备。

由于我没有发现我的假设的证据,有人可以在这里提供一些启示吗?

【问题讨论】:

    标签: .net windows winforms winapi hover


    【解决方案1】:

    来自 MSDN...

    SPI_GETMOUSEHOVERTIME:

    检索鼠标指针必须移动的时间(以毫秒为单位) 停留在 TrackMouseEvent 的悬停矩形中以生成一个 WM_MOUSEHOVER 消息。 pvParam 参数必须指向 UINT 接收时间的变量。

    SPI_SETMOUSEHOVERTIME:

    指定的时间应介于 USER_TIMER_MAXIMUM 和 USER_TIMER_MINIMUM。如果 uiParam 小于 USER_TIMER_MINIMUM,则 函数将使用 USER_TIMER_MINIMUM。如果 uiParam 大于 USER_TIMER_MAXIMUM,该函数将是 USER_TIMER_MAXIMUM。

    设置定时器功能

    如果 uElapse 小于 USER_TIMER_MINIMUM (0x0000000A),则超时 设置为 USER_TIMER_MINIMUM。如果 uElapse 大于 USER_TIMER_MAXIMUM (0x7FFFFFFF),超时设置为 USER_TIMER_MAXIMUM。

    【讨论】:

    • 是的,这如何回答我的问题?
    • SPI_SETMOUSEHOVERTIME 的有效最小值是USER_TIMER_MINIMUM。这也是SetTimer 的最小有效值。所以继续使用计时器。
    • 我不敢相信我必须解释这一点。问题是悬停时间可以等于或小于零吗?有三个证据可以弄清楚。 1. SPI_GETMOUSEHOVERTIME 返回UINT。 UINT 的最小值为零。所以现在我们需要知道结果是否真的可以为零。 2. 查看 SPI_SETMOUSEHOVERTIME 向我们展示了有效的下限是 USER_TIMER_MINIMUM3. 查看SetTimer 告诉我们USER_TIMER_MINIMUM 是一个十进制值为10 的常数。 所以最终的答案是 SPI_GETMOUSEHOVERTIME 永远不能小于 10。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多