XQueryPointer 的 mask_return 值中的位表示哪些键?
What keys do the bits in the XQueryPointer's mask_return values represent?
在X11编程中,我们有时使用XQueryPointer函数来确定鼠标在屏幕上的位置。
在xlib.h中,我们还可以看到,这个函数用表示按键的各个标志填充一个名为mask_report的整数:
extern Bool XQueryPointer(
Display*,
Window,
Window*,
Window*,
int*,
int*,
int*,
int*,
unsigned int* /* mask_return */
);
我使用以下代码对此进行了实验:
Display *display = XOpenDisplay(nullptr);
int screen = DefaultScreen(display);
Window rootWin = RootWindow(display, screen);
Window qRoot;
Window qChild;
int qRootX;
int qRootY;
int qChildX;
int qChildY;
unsigned int qMask;
while(true)
{
if(XQueryPointer(display, rootWin, &qRoot, &qChild, &qRootX, &qRootY, &qChildX, &qChildY, &qMask))
{
for(int i = 0; i < sizeof(int) * 8; i++)
{
int mask = 1 << sizeof(int) * 8 - i - 1;
if(mask & qMask)
{
printf("1");
}
else
{
printf("0");
}
}
printf("(%d)n", qMask);
}
}
使用这种方法,我已经能够隔离以下标志:
- 0000000000000000000000000000000 1(1(:如果在调用XQueryPointer时按下左移键或右移键,则此标志处于启用状态
- 0000000000000000000000000000 1000(4(:如果在调用XQueryPointer时按下左控制键或右控制键,则此标志亮起
- 000000000000000000000000000 10000(8(:如果在调用XQueryPointer时按下左alt键或右alt键,则此标志处于启用状态
- 00000000000000000000001000000000(256(:如果调用XQueryPointer时按下mouse1,则此标志处于启用状态
- 00000000000000000000010000000000(512(:如果在调用XQueryPointer时按下mouse3,则此标志处于启用状态
- 00000000000000000000100000000000(1024(:如果在调用XQueryPointer时按下mouse2,则此标志处于启用状态
对于一个已有30多年历史的API,您可能会认为这些标志的文档将广泛可用,但我似乎在任何地方都找不到提及它们的地方。
有人知道剩余的标志是否/用于什么用途,或者我可以在哪里了解更多关于它们的信息吗
此外,我能相信相同的标志在不同的系统上总是意味着相同的东西吗
直接从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)
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何将ampl中的集合表示为c++中的向量
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- c++模板来表示多项式
- 询问在设计我的手臂模拟器功能表示格式1
- CMakeLists.txt中的命名空间表示法
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如何计算Big-O表示法中的平均渐近运行时间
- 我应该如何表示我拥有的连续元素序列?
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 表示类模板C++空类型
- 具有所表示类的相同构造函数签名的代理类模板
- 嵌套在循环中的两个循环的 big-O 表示法
- 具有引用成员的结构是否具有唯一的对象表示形式
- 使用 int 表示浮点除法 C++
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- findHomography返回的mask参数的值表示什么?