【问题标题】:User32.dll mouse eventsUser32.dll 鼠标事件
【发布时间】:2012-02-01 01:36:33
【问题描述】:

我正在查看一个光标控制类,我正在尝试使其适应我的程序。我让它按我的意愿工作,但我不确定这些数字在这种情况下意味着什么。任何人都可以阐明 0x01 等的含义。

    private const int MouseEventMove = 0x01;
    private const int MouseEventLeftDown = 0x02;
    private const int MouseEventLeftUp = 0x04;
    private const int MouseEventRightDown = 0x08;
    private const int MouseEventRightUp = 0x10;
    private const int MouseEventAbsolute = 0x8000;

谢谢。

【问题讨论】:

  • 这些是 Windows 消息代码。如果发生相关事件,Windows 将发送这些代码。
  • 对不起我的错误。他们是旗帜吧?正如@Hans Passant 所说。

标签: c# mouse


【解决方案1】:

这些是标志枚举。 它们每个都被赋予一个 2 的幂的值,因此对于任何组合值,设置哪个标志都不会有歧义。

来自 MSDN:

标志枚举用于屏蔽位字段并按位进行 比较。它们是多个时使用的正确设计 枚举值可以同时指定。

http://msdn.microsoft.com/en-us/library/ms229062.aspx

在您的特定情况下,枚举似乎描述了正在发生的鼠标事件类型。

编辑:正如 Hans 所指出的,这在技术上不是一个枚举,而是一组 const int 定义,尽管出于所有实际目的,我觉得它是一个枚举 - 为整数值提供人类可读的标签。有没有更合适的名字?

【讨论】:

  • 实际上不是。这些值在 Windows SDK 标头中使用 #define 声明。因此翻译成 const int.
  • @Hans - 你是对的,尽管出于所有功能目的,它们都用作枚举。你会怎么称呼这样一组 const ints?
【解决方案2】:

这些是您传递给mouse_event() Windows api 函数的 MOUSEEVENTF 标志的值。标志值在 WinUser.h Windows SDK 头文件中声明。如链接的 MSDN 文章中所述,您不应再使用此功能。

访问 pinvoke.net 以获得正确的 SendInput() 声明。

【讨论】:

  • 嗨,汉斯。是的,我使用的代码确实使用了 SendInput 方法,但它仍然需要这些标志。感谢您对进一步阅读材料的建议。
猜你喜欢
  • 2012-02-03
  • 2019-09-01
  • 2013-05-18
  • 2019-08-18
  • 2012-03-23
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多