程式語言 - X Window (X11) - C/C++ - Handle Event



參考資訊:
https://github.com/QMonkey/Xlib-demo
https://people.scs.carleton.ca/~claurend/Courses/COMP2401/Notes/COMP2401_Ch8_Graphics.pdf

main.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <X11/Xlib.h>
  
int main(int argc, char *argv[])
{
    GC gc = 0;
    Window win = 0;
    XColor xcolour = { 0 };
    Display *display = NULL;
    XPoint pt[3] = { {10, 10}, {110, 110}, {210, 10} };
 
    display = XOpenDisplay(NULL);
    win = XCreateSimpleWindow(
        display,
        RootWindow(display, 0),
        0,
        0,
        320,
        240,
        0,
        0,
        0xffffff);
  
    XStoreName(display, win, "main");
    XSelectInput(display, win, ExposureMask | KeyPressMask | KeyReleaseMask);
    gc = XCreateGC(display, win, 0, NULL);
    XMapWindow(display, win);
    XFlush(display);
    usleep(100000);

    int key = 0;
    XEvent event = { 0 }; 
    while(1) {
        XNextEvent(display, &event);

        switch(event.type) {
        case Expose:
            printf("window exposed\n");
            break;
        case KeyPress:
            key = event.xkey.keycode;
            printf("key pressed: %d\n", key);
            break;
        case KeyRelease:
            key = event.xkey.keycode;
            printf("key released: %d\n", key);
        break;
        }
    }
 
    XUnmapWindow(display, win);
    XDestroyWindow(display, win);
    XCloseDisplay(display);
  
    return 0;
}

編譯、測試

$ gcc main.c -o main -lX11
$ ./main
    window exposed
    key pressed: 38
    key released: 38