win32

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 84cdd1cd5529c9ebfb073f1b561550e92d32a73b
parent 2add23be1ff1016810454bc85346ef656ae24269
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 18 Dec 2025 09:00:08 +0900

create window in xcb

Diffstat:
MMakefile | 6+++---
Mxcb.c | 33+++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile @@ -1,10 +1,10 @@ all: xlib xcb -xlib: +xlib: xlib.c $(CC) -Wall -Wpedantic -Wextra -I/usr/X11R6/include xlib.c -L/usr/X11R6/lib -lX11 -lXrender -o xlib -xcb: - $(CC) -Wall -Wpedantic -Wextra -I/usr/X11R6/include xcb.c -L/usr/X11R6/lib -o xcb +xcb: xcb.c + $(CC) -Wall -Wpedantic -Wextra -I/usr/X11R6/include xcb.c -L/usr/X11R6/lib -lxcb -o xcb clean: rm -f xlib xcb diff --git a/xcb.c b/xcb.c @@ -1,4 +1,37 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> // for pause(void) +#include <xcb/xcb.h> +#include <xcb/xproto.h> + +void fatal(char *msg); int main(void) { + xcb_connection_t *conn = xcb_connect(NULL, NULL); + if (xcb_connection_has_error(conn) != 0) { + fatal("can't connect to the display"); + } + xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data; + xcb_window_t window = xcb_generate_id(conn); + xcb_create_window_value_list_t attr = { + .event_mask = XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_EXPOSURE, + }; + xcb_create_window(conn, XCB_COPY_FROM_PARENT, window, screen->root, + 0, 0, 800, 600, 0, + XCB_WINDOW_CLASS_INPUT_OUTPUT, + screen->root_visual, + XCB_CW_EVENT_MASK, &attr); + xcb_map_window(conn, window); + + xcb_flush(conn); + + pause(); + + xcb_disconnect(conn); return 0; } + +void fatal(char *msg) { + fprintf(stderr, "%s\n", msg); + exit(1); +}