C第一课

#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;
}

  

posted @ 2025-07-17 11:17  华腾智算  阅读(6)  评论(0)    收藏  举报
https://damo.alibaba.com/ https://tianchi.aliyun.com/course?spm=5176.21206777.J_3941670930.5.87dc17c9BZNvLL