#include <X11/Xlib.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
// 1. 打开与X服务器的连接
Display *display = XOpenDisplay(NULL);
if (!display)
{
fprintf(stderr, "无法连接到X服务器\n");
return 1;
}
// 2. 获取默认屏幕
int screen = DefaultScreen(display);
Window root = RootWindow(display, screen);
// 3. 创建窗口
Window window = XCreateSimpleWindow(
display, root,
100, 100, // x,y位置
400, 300, // 宽度,高度
1, // 边框宽度
BlackPixel(display, screen), // 边框颜色
WhitePixel(display, screen) // 背景颜色
);
// 4. 设置窗口标题
XStoreName(display, window, "最简单的X11图形窗口");
// 5. 选择要接收的事件类型
XSelectInput(display, window, ExposureMask | KeyPressMask);
// 6. 显示窗口
XMapWindow(display, window);
// 7. 获取图形上下文(用于绘图)
GC gc = XCreateGC(display, window, 0, NULL);
XSetForeground(display, gc, BlackPixel(display, screen));
// 主事件循环
XEvent event;
while (1)
{
XNextEvent(display, &event);
// 处理窗口暴露事件(需要重绘)
if (event.type == Expose)
{
// 绘制一条从(50,50)到(350,250)的对角线
XDrawLine(display, window, gc, 50, 50, 350, 250);
}
// 按键退出
else if (event.type == KeyPress)
{
break;
}
}
// 8. 清理资源
XFreeGC(display, gc);
XDestroyWindow(display, window);
XCloseDisplay(display);
return 0;
}