我正在尝试使用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!”。在窗口中。我需要更改使其执行此操作吗?编辑:我的完整代码...
您需要调用XFlush,并且应该注意X11坐标。