如何使我的X11程序向窗口绘制字符串?

问题描述 投票:0回答:1

我正在尝试使用X11 / Xlib创建一个Hello World程序,但是当我调用XDrawString()时,它不会绘制“ Hello world!”。在窗口中。我需要更改使其执行此操作吗?

编辑:我的完整代码如下。当问题描述为“主要是代码”时,StackOverflow不会让我提交问题,因此我还将在代码下解释程序打算执行的操作。

代码:

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    //Open default display
    Display *display = XOpenDisplay(NULL);
    if(display != NULL)
    {
        //Get default screen
        Screen *screen = DefaultScreenOfDisplay(display);
        if(screen != NULL)
        {
            //Initialize window
            Window window = XCreateSimpleWindow(display, RootWindowOfScreen(screen), 0, 0, WidthOfScreen(screen), HeightOfScreen(screen), 0, BlackPixelOfScreen(screen), BlackPixelOfScreen(screen));
            XSelectInput(display, window, KeyPressMask || ExposureMask);
            XStoreName(display, window, "Hello World!");
            XMapRaised(display, window);

            //Initialize graphics context
            GC graphics_context = DefaultGCOfScreen(screen);

            //Event handling loop
            XEvent event;
            while(1)
            {
                XNextEvent(display, &event);
                if(event.type == KeyPress)
                {
                    //KeyPress event
                    if(event.xkey.keycode == XKeysymToKeycode(display, XK_Escape))
                    {
                        XDestroyWindow(display, window);
                        XCloseDisplay(display);
                        exit(EXIT_SUCCESS);
                    }
                }
                else if(event.type == Expose)
                {
                    //Expose event (window is visible)
                    char *msg = "Hello world!";
                    XDrawString(display, window, DefaultGCOfScreen(screen), 0, 0, msg, strlen(msg));
                }
            }
            XDestroyWindow(display, window);
        }
        XCloseDisplay(display);
    }
    exit(EXIT_FAILURE);
}

此代码旨在

  • 打开默认显示;

  • 获取此显示的默认屏幕

  • 在默认显示器上创建一个简单窗口,作为屏幕根窗口的子窗口,x和y分别为零,width和height分别等于屏幕的默认宽度和高度,宽度为0,边框和窗口背景都以屏幕黑色像素的颜色着色

  • 选择曝光事件和按键作为窗口的可接受输入

  • 存储名称“ Hello World!”在窗口中

  • 映射并提升窗口

  • 获取屏幕的默认图形上下文

  • 无限期处理事件,当用户按下Escape键或绘制“ Hello world!”时,以成功状态退出。到窗口上的窗口曝光

  • 如果打开显示器失败或显示器的默认屏幕为NULL,则退出,并显示失败状态>]

我正在尝试使用X11 / Xlib创建一个Hello World程序,但是当我调用XDrawString()时,它不会绘制“ Hello world!”。在窗口中。我需要更改使其执行此操作吗?编辑:我的完整代码...

c x11
1个回答
0
投票

您需要调用XFlush,并且应该注意X11坐标。

© www.soinside.com 2019 - 2024. All rights reserved.