linux使用xlib库创建窗口

⌚Time: 2023-05-01 23:37:43

👨‍💻Author: Jack Ge

代码


/*

* Simple Xlib application drawing a box in a window.

*/



#include <X11/Xlib.h>

#include <stdio.h>

#include <stdlib.h>



int main()

{

        struct _XDisplay *d;

        int s;

        Window w;

        XEvent e;



        /* To open a connection to the X server that controls a display*/

        d = XOpenDisplay(NULL);

        if(d == NULL)

        {

                printf("Cannot open display\n");

                exit(1);

        }



/* Both return the default screen number referenced by the XOpenDisplay() function */

        s = DefaultScreen(d);



        /* create window */

        w = XCreateSimpleWindow(d,

                                RootWindow(d, s),

                                10,

                                10,

                                100,

                                100,

                                1,

                                BlackPixel(d, s),

                                WhitePixel(d, s));



        /* select kind of events we are interested in */

        XSelectInput(d, w, ExposureMask | KeyPressMask);



        /* map (show) the window */

        XMapWindow(d, w);



        /* event loop */

        while(1)

        {

                XNextEvent(d, &e);

                /* draw or redraw the window */

                if(e.type == Expose)

                {

                        XFillRectangle(d, w, DefaultGC(d, s), 10, 10, 100, 100);

                }

                /* exit on key press */

                if(e.type == KeyPress)

                        break;

        }



        /* close connection to server */

        XCloseDisplay(d);



        return 0;

}

编译链接


g++ test.cpp -lX11

linux使用xlib创建窗体不依赖其它的库,如gtk图形库。与windows的win32 API窗体创建过程差不多。都是创建窗体和最后的消息循环。