在XLib中创建窗口时我提供给SetWindowAttributes.event_mask成员的掩码是什么?我必须将什么传递给XCreateWindow()的第11个参数我在主消息循环中寻找的事件是什么(我在哪里使用XNextEvent(lDisplay,&xEvent);?由于X的行为与Microsoft的Win32API不同,我如何确定鼠标是在我的窗口上还是在我的“应用程序”中的窗口上而不是在桌面上?我找过类似的帖子。如果已经有一个,请指出正确的方向。更新对于那些想要简单回答第1-3部分的人:1.xAttributes.event_mask=ExposureMask|KeyPres
我正在尝试使用Xlib来更深入地了解LinuxGUI程序的工作原理。我编写了一个在窗口中显示“Hello,world”的简单程序,但它看起来相当不合时宜,因为文本没有消除锯齿。在X11中显示抗锯齿文本的最佳方式是什么?GTK、Qt和其他工具包是如何实现抗锯齿的? 最佳答案 X协议(protocol)的文本渲染工具不支持抗锯齿,现在用得不多了。(我认为原因是X字体协议(protocol)没有任何alphachannel的位置。)GTK和Qt使用FreeType库在客户端渲染文本,得到一个带有alphachannel的像素图作为结果。如
我正在尝试使用Xlib来更深入地了解LinuxGUI程序的工作原理。我编写了一个在窗口中显示“Hello,world”的简单程序,但它看起来相当不合时宜,因为文本没有消除锯齿。在X11中显示抗锯齿文本的最佳方式是什么?GTK、Qt和其他工具包是如何实现抗锯齿的? 最佳答案 X协议(protocol)的文本渲染工具不支持抗锯齿,现在用得不多了。(我认为原因是X字体协议(protocol)没有任何alphachannel的位置。)GTK和Qt使用FreeType库在客户端渲染文本,得到一个带有alphachannel的像素图作为结果。如
等待X11窗口被映射和查看的正确方法是什么?准确地说,我想等到我可以安全地调用XSetInputFocus()而不会遇到X服务器因以下错误而适得其反的任何风险://XErroroffailedrequest:BadMatch(invalidparameterattributes)//Majoropcodeoffailedrequest:42(X_SetInputFocus)目前这个错误经常发生,尤其是在慢速X服务器上,或者在使用libXrandr更改显示器分辨率后立即尝试打开一个新窗口时。我已经有了针对这个问题的解决方案,但它很老套,因为它会轮询窗口属性,所以我想知道是否有更简洁的版本
等待X11窗口被映射和查看的正确方法是什么?准确地说,我想等到我可以安全地调用XSetInputFocus()而不会遇到X服务器因以下错误而适得其反的任何风险://XErroroffailedrequest:BadMatch(invalidparameterattributes)//Majoropcodeoffailedrequest:42(X_SetInputFocus)目前这个错误经常发生,尤其是在慢速X服务器上,或者在使用libXrandr更改显示器分辨率后立即尝试打开一个新窗口时。我已经有了针对这个问题的解决方案,但它很老套,因为它会轮询窗口属性,所以我想知道是否有更简洁的版本
我正在尝试监听键盘输入(使用X11事件循环)并获取扫描码。这些扫描码应该指的是键的物理位置,而不是它键入的字符。问题是,我所能得到的只是KeySyms和KeyCodes,它们针对不同的语言(例如QWERTY与QWERTZ)进行了不同的映射。我目前的解决方案是读取“/usr/share/X11/xkb/keycodes/evdev”文件。它包含关键位置到关键代码的映射。使用它我可以简单地将任何键码转换回扫描码。我的猜测是这不是一种稳定的做事方式。我对Linux一无所知。这就是为什么我认为在这里问可能是个好主意。可以假设大多数用户的机器都在使用这些evdev映射吗?如果没有,我还能在哪里找
我正在尝试监听键盘输入(使用X11事件循环)并获取扫描码。这些扫描码应该指的是键的物理位置,而不是它键入的字符。问题是,我所能得到的只是KeySyms和KeyCodes,它们针对不同的语言(例如QWERTY与QWERTZ)进行了不同的映射。我目前的解决方案是读取“/usr/share/X11/xkb/keycodes/evdev”文件。它包含关键位置到关键代码的映射。使用它我可以简单地将任何键码转换回扫描码。我的猜测是这不是一种稳定的做事方式。我对Linux一无所知。这就是为什么我认为在这里问可能是个好主意。可以假设大多数用户的机器都在使用这些evdev映射吗?如果没有,我还能在哪里找
FvwmButtons(fvwm窗口管理器的一个模块)具有Swallow功能,嵌入将应用程序的窗口转换为面板。我必须用Motif和Xlib做这样的事情。我想在我的应用程序中嵌入一个Xclock。我想我必须更改嵌入式应用程序的窗口ID。我该怎么做? 最佳答案 唯一受支持且可靠的机制是XEmbed,但它需要嵌入式应用程序配合。如果没有协作应用程序,您将处于一个充满可怕黑客的世界。您需要做的基本事情是XReparentWindow(),但问题是您正在与窗口管理器作斗争,它也需要重新设置窗口的父级。您还可能混淆应用程序,该应用程序将期望IC
FvwmButtons(fvwm窗口管理器的一个模块)具有Swallow功能,嵌入将应用程序的窗口转换为面板。我必须用Motif和Xlib做这样的事情。我想在我的应用程序中嵌入一个Xclock。我想我必须更改嵌入式应用程序的窗口ID。我该怎么做? 最佳答案 唯一受支持且可靠的机制是XEmbed,但它需要嵌入式应用程序配合。如果没有协作应用程序,您将处于一个充满可怕黑客的世界。您需要做的基本事情是XReparentWindow(),但问题是您正在与窗口管理器作斗争,它也需要重新设置窗口的父级。您还可能混淆应用程序,该应用程序将期望IC
我一直在尝试并阅读互联网上的大量资源,试图找到一种从X显示器获取UTF-8键盘(组合)输入的方法。但我无法让它发挥作用。我试过这个link中的示例代码(示例11-4),但没有成功。我还编写了一个简单的示例(如下)来尝试使其工作。我的简单测试用例是打印一个“é”,这是通过输入尖音符号然后输入e来实现的。怎么了?谢谢,这是我的例子:#include#include#include#include#include#include#includeintmain(intargc,char**argv){intscreen_num,width,height;unsignedlongbackgrou