參考資訊:
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