linux下 X11桌面 一个C语言调用Xlib创建窗口的小列子

5 篇文章 0 订阅

一个与linux下使用Xlib进行窗口编程的小例子,作为一个刚开始了解Xlib的初学者,应该从一个小例子开始,从编译,运行,再到逐步深入...,根据X11协议原理,其实我们所编写的程序都是Xclient程序,Xserver负责接收硬件事件,Xclient负责计算,结果会反馈给Xserver,Xserver来负责与硬件沟通,例如显示Xclient绘制的图形到显示器.

具体编译:gcc x11.c -o output -I/usr/X11R6/include -L/usr/X11R6/lib -lX11

源码如下:

/*
  * 下边是编译命令
  * gcc x11.c -o output -I/usr/X11R6/include -L/usr/X11R6/lib -lX11
  */
 
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(void)
{
    Display *display;
    Window window;
    XEvent event;
    char *msg = "你好 ,这是一个测试窗口!";
    int s;
 
    /* 与Xserver建立连接 */
    display = XOpenDisplay(NULL);
    if (display == NULL)
    {
        fprintf(stderr, "Cannot open display\n");
        exit(1);
    }
 
 		
    s = DefaultScreen(display);
 
    /* 创建一个窗口 */
    window = XCreateSimpleWindow(display, RootWindow(display, s), 10, 10, 200, 200, 1,
                           BlackPixel(display, s), WhitePixel(display, s));
 
    /* 选择一种感兴趣的事件进行监听 */
    XSelectInput(display, window, ExposureMask | KeyPressMask);
 
    /* 显示窗口 */
    XMapWindow(display, window);
 
    /* 事件遍历 */
    for (;;)
    {
        XNextEvent(display, &event);
 
        /* 绘制窗口或者重新绘制 */
        if (event.type == Expose)
        {
            XFillRectangle(display, window, DefaultGC(display, s), 20, 20, 10, 10);
            XDrawString(display, window, DefaultGC(display, s), 50, 50, msg, strlen(msg));
        }
        /* 当检测到键盘按键,退出消息循环 */
        if (event.type == KeyPress)
            break;
    }
 
    /* 关闭与Xserver服务器的连接 */
    XCloseDisplay(display);
 
    return 0;
 }


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值