X11 为什么我无法绘制任何文字?

2024-01-09


我正在努力学习X11。这对我来说非常困难,因为我没有 Linux 上的窗口应用程序的经验。
我写了一些简单的代码,但无法解决这个不可见的文本问题。 一切可能都工作正常,当我尝试使用 DrawRectangle 函数绘制矩形时,它正在工作。
这是代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <X11/Xlib.h>
int main()
{
Display* myDisplay;
Window myWindow;
int myScreen;
GC myGC;
XEvent myEvent;
unsigned long black, white;
char* hello = "Hello world!";
XFontStruct* myFont;

if((myDisplay = XOpenDisplay(NULL)) == NULL)
{
    puts("Error in conneting to X Server!");
    return -1;
}
myScreen = DefaultScreen(myDisplay);
black = BlackPixel(myDisplay, myScreen);
white = WhitePixel(myDisplay, myScreen);

myWindow = XCreateSimpleWindow(myDisplay, RootWindow(myDisplay, myScreen), 0, 0, 640, 320, 5, black, white);

XSelectInput(myDisplay, myWindow, ExposureMask);

XClearWindow(myDisplay, myWindow);
XMapWindow(myDisplay, myWindow);

myGC = XCreateGC(myDisplay, myWindow, 0, 0);
XSetForeground(myDisplay, myGC, black);
XSetBackground(myDisplay, myGC, white);

myFont = XLoadQueryFont(myDisplay, "-Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1");
XSetFont(myDisplay, myGC, myFont->fid);

while(1)
{
    XNextEvent(myDisplay, &myEvent);

    if(myEvent.type == Expose)
    {
        XClearWindow(myDisplay, myWindow);
// HERE I DONT KNOW WHY IT DOESNT WORK!
        XDrawString(myDisplay, myWindow, myGC, 0, 0, hello, strlen(hello)); 
    }   
}

XFreeGC(myDisplay, myGC);
XDestroyWindow(myDisplay, myWindow);
XCloseDisplay(myDisplay);

return 0;
}

谢谢你的帮助!


Your 字体路径参数XLoadQueryFont是错的(在我的 Linux/Debian 桌面上)。检查与xlsfonts命令正确的(它们都是小写)。

With

  myFont = XLoadQueryFont 
      (myDisplay,
        "-misc-fixed-medium-r-normal--9-90-75-75-c-60-iso10646-1");

它可以工作得更好。也尝试与"lucidasanstypewriter-bold-14"

最重要的是坐标传递给XDrawString错了。请记住,它们是baseline你的文字。和x=0, y=0 is the top left窗户的一角,y 正在增长向下x 增长到right。因此,您的文本将绘制在窗口之外的顶部上方。所以y应该是正数并且大于字体高度。

Try

  XDrawString (myDisplay, myWindow, myGC, 15, 20, hello,
           strlen (hello));

正如我评论的那样,你需要处理lot更多活动。


我没有 Linux 上的窗口应用程序的经验。

And 要学习 GUI 编程,我强烈建议首先使用一些toolkit https://en.wikipedia.org/wiki/Widget_toolkit like GTK http://gtk.org/ or Qt http://qt.io/也许SDL http://libsdl.org/.

原始 X11 编程太难了(当你学会它的时候,就会很困难了)obsolete,例如经过Wayland https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)),特别是因为 X11 应用程序需要ICCCM https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html & EWMH https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html符合。请注意,整个 X11 文档需要近万页。

也可以看看https://tronche.com/gui/x/xlib/ https://tronche.com/gui/x/xlib/

顺便说一句,大多数 Linux GUI 应用程序都在客户端绘制像素图并将其发送到 X11 服务器。阅读合成窗口管理器 https://en.wikipedia.org/wiki/Compositing_window_manager。绘图请求如XDrawString在实践中不再使用。最近的字体相关库,例如libfontconfig, libXft等正在致力于client side.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

X11 为什么我无法绘制任何文字? 的相关文章

  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • g++ 对于看似不相关的变量“警告:迭代...调用未定义的行为”

    考虑以下代码strange cpp include
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 如何在单独的类库.net core中使用DbContext?

    我正在尝试从类库中的 net core 3 1 MVC 项目访问我的 dbcontext 目前我将数据库注入到服务集合中startup cs public class AppDbContext DbContext public DbSet
  • 在 foreach 循环内部和外部调用 SaveChanges() 有什么区别吗?

    假设对循环内部的 EF 实体进行了更改 在 foreach 循环中或循环外部调用 EF SaveChanges 之间是否存在任何性能优势 技术差异 YES 如果在循环内调用它 EF会将更改写回数据库对于每一个实体 每个实体都将进行自己的单独
  • Apache MQ Artemis - MQTT 保留消息对于连接到集群中其他节点的客户端不可用

    I have 4 ActiveMQ 阿耳忒弥斯 2 10 1实例运行在cluster 客户端 A 连接到其中一个节点并发布MQTTQoS 0 的消息并且保留 真 当新的 MQTT 客户端 B 连接到另一个节点在集群中并订阅了该主题 之前发送
  • Flutter报错无法启动守护进程

    我的 flutter 项目在我的旧笔记本电脑上运行顺利 但是当我使用我的新笔记本电脑时 我的 flutter 项目无法在调试模式下运行 这个错误 FAILURE Build failed with an exception What wen
  • 检查字符串是否包含CJK(中文)字符[重复]

    这个问题在这里已经有答案了 我需要检查一个字符串是否包含中文字符 搜索后我发现我必须使用正则表达式查看此模式 u31C0 u31EF 但我无法让正则表达式工作 有人经历过这种情况吗 正则表达式正确吗 正如所讨论的here https sta
  • Hibernate 的重复密钥问题

    使用 Hibernate 4 0 我有三个 hibernate 实体 歌曲 封面艺术 封面图片 Songs 代表音乐文件 CoverImage 代表图像 Cover Art 用于将封面图像与歌曲相关联 一首歌曲可以包含多个封面图像 Song
  • React Redux 与路由器位置、分页/排序和获取

    我正在编写一些通用的 Todo List 组件 具有以下功能 分页 排序 保留 URL 中的部分状态 页面 排序 使用 HTTP 请求异步获取数据 使用 redux saga 现在 我正在尝试寻找 最佳 redux 操作序列的模式 以使该操
  • 将资源放入jar文件中并将其公开给网络

    我有一个 Web 应用程序 其资源文件夹中有一堆 js 和 css 文件 我如何将它们公开到网络上以便能够在我的网页中引用它们 以及如何引用这些文件 我还想稍后将这些资源放在一个单独的 jar 文件中 并且 就像上一个问题一样 也将它们公开
  • Phonegap Hook - execvp 权限被拒绝

    我正在尝试运行我在网上找到的phonegap hook 但我总是在构建时遇到相同的错误 execvp Permission denied 该钩子是位于此处的 splash and icon 钩子 http devgirl org 2013
  • Dijkstra 算法是确定性的吗?

    我认为 Dijkstra 算法是确定的 因此如果您选择相同的起始顶点 您将得到相同的结果 到每个其他顶点的距离相同 但我不认为它是确定性的 它为每个操作定义了以下操作 因为这意味着它不必首先搜索最短距离 我对么 如果我错了 你能解释一下为什
  • 屏蔽 UIView、CALayer 的动画

    我正在努力实现以下目标 用户点击视图 circular视图会在其左侧弹出 其中包含一些图像内容 视图应该从触摸点开始动画到触摸视图外部左侧的最终帧 在动画过程中 它应该是一个圆圈 增长到正确的位置和大小 一切都与下面的代码配合得很好 仅此而
  • Css3 @fontface 不适用于 Chrome 17 和 Firefox 10

    我正在尝试将此代码用于阿拉伯字体的 fontface font face font family MothnnaFont src url fonts mothnna eot IE9 Compat Modes src url fonts mo
  • Spring Hibernate 5.4.22.Final:javax.persistence.TransactionRequiredException:升级 Spring Boot 时没有正在进行事务

    我最近从 Spring Boot 1 5 更新到 2 3 5 但在保存数据时遇到了一些问题 我的应用程序是 Spring Batch 它读取 处理数据并将数据写入数据库 读取器和处理器都很好 但编写器出现了问题 它在 1 5 spring
  • mod_pagespeed 缓存文件夹中的奇怪域

    大约一年前 我在我的 VPS 服务器上安装了 mod pagespeed 对其进行设置并使其运行 最近 我正在探索服务器上的文件 进入 pagespeed 缓存文件夹 发现了一些奇怪的文件夹 所有文件夹通常都以这种方式命名 2Fwww my
  • 如何创建自定义 Murmur Avalanche 混合器?

    我正在尝试使用 Avalanche 混合器来散列整数坐标 我一直在使用杂音3的 https en wikipedia org wiki MurmurHash cite note Horvath 732 位和 64 位雪崩混合器这样做 而不是
  • QLPreviewController 隐藏底部工具栏

    I use QLPreviewController在我的应用程序中 想要隐藏底部工具栏 该工具栏允许在其数据源项目中移动 有可能以某种方式做吗 我尝试将其搜索为subview of QLPreviewController s view但它只
  • 如何捕获 TDataModule.OnCreate 事件中的异常?

    我在 Delphi 中遇到了以下问题try except block 我有一个简单的应用程序 一个名为 MainFormfr MAIN和一个TDataModule named DM DM不是自动创建的 而是在运行时创建的fr MAIN s
  • 如何在 Rails 4 中重新加载路线 /config/routes/* ?

    如何强制rails 4重新加载所有路线文件 也就是说 无需重新启动应用程序即可从 config routes 创建路由 rb 已加载 我在 config routes 中将它们分开 rb 但是这些 config routes 文件不会重新加
  • Azure Blob - 503 出口超出帐户限制

    所以我偶尔会收到这个错误 初始化流读取器时出错或未找到 Blob 响应状态 代码不表示成功 503 出口超过该帐户 限制 我不知道帐户限制 并且文件不应大到足以突破吞吐量限制 Blob 存储具有一些令人惊讶的高吞吐量限制 有谁见过这个并知道
  • X11 为什么我无法绘制任何文字?

    我正在努力学习X11 这对我来说非常困难 因为我没有 Linux 上的窗口应用程序的经验 我写了一些简单的代码 但无法解决这个不可见的文本问题 一切可能都工作正常 当我尝试使用 DrawRectangle 函数绘制矩形时 它正在工作 这是代