XQueryPointer的mask_return值中的位代表什么键?

时间:2018-07-22 21:17:32

标签: c++ x11 xlib

在X11编程中,有时我们使用XQueryPointer函数来确定鼠标在屏幕上的位置。

在xlib.h中,我们还可以看到此函数填充了一个名为mask_return的整数,其中包含表示按键的单独标志:

--from=markdown+definition_lists+attribute_headers

我已经使用以下代码对此进行了实验:

extern Bool XQueryPointer(
    Display*,
    Window,
    Window*,
    Window*,
    int*,
    int*,
    int*,
    int*,
    unsigned int*  /* mask_return */
);

使用此方法,我已经能够隔离以下标志:

  • 00000000000000000000000000000000000001(1):如果在调用XQueryPointer时按下向左或向右shift键,则此标志为开。
  • 00000000000000000000000000001000(4):如果在调用XQueryPointer时按下向左或向右控制键,则此标志打开。
  • 00000000000000000000000000000000010000(8):如果在调用XQueryPointer时按下向左或向右alt键,则此标志为开。
  • 00000000000000000000001000000000(256):如果在调用XQueryPointer时按下mouse1,则此标志打开。
  • 00000000000000000000010000000000(512):如果在调用XQueryPointer时按下mouse3,则此标志打开。
  • 00000000000000000000100000000000(1024):如果在调用XQueryPointer时按下mouse2,则此标志打开。

您会认为对于30多年的API,这些标志的文档将可以广泛使用,但我似乎在任何地方都找不到提及它们的信息。

有人知道其余标志是否/用于什么用途,或者在哪里可以了解更多有关它们的信息?

此外,我可以相信相同的标志在不同系统上始终意味着相同的事情吗?

1 个答案:

答案 0 :(得分:1)

直接来自X.h

/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
   state in various key-, mouse-, and button-related events. */

#define ShiftMask       (1<<0)
#define LockMask        (1<<1)
#define ControlMask     (1<<2)
#define Mod1Mask        (1<<3)
#define Mod2Mask        (1<<4)
#define Mod3Mask        (1<<5)
#define Mod4Mask        (1<<6)
#define Mod5Mask        (1<<7)

以及稍后在同一文件中

/* button masks.  Used in same manner as Key masks above. Not to be confused
   with button names below. */

#define Button1Mask     (1<<8)
#define Button2Mask     (1<<9)
#define Button3Mask     (1<<10)
#define Button4Mask     (1<<11)
#define Button5Mask     (1<<12)