X Window Programming/最初のXプログラム
表示
最初のXプログラム
[編集]X Window Systemの基本的な機能を理解するために、簡単なウィンドウ表示プログラムを作成してみましょう。この章では、最初のXプログラムを作成し、UNIX環境でのコンパイルと実行方法について説明します。
簡単なウィンドウ表示プログラム
[編集]以下は、Xサーバーに接続して単純なウィンドウを表示するプログラムの例です。このプログラムは、ウィンドウを作成し、それを画面に表示する基本的な機能を実装しています。
#include <X11/Xlib.h> #include <stdio.h> #include <stdlib.h> int main() { // Xサーバーへの接続 Display *display = XOpenDisplay(NULL); if (!display) { fprintf(stderr, "Xサーバーに接続できません\n"); exit(1); } // デフォルトスクリーンの取得 int screen = DefaultScreen(display); // ウィンドウの作成 Window window = XCreateSimpleWindow( display, RootWindow(display, screen), 100, 100, 400, 300, 1, BlackPixel(display, screen), WhitePixel(display, screen) ); // ウィンドウの名前を設定 XStoreName(display, window, "最初のXプログラム"); // イベントマスクの設定 XSelectInput(display, window, ExposureMask | KeyPressMask); // ウィンドウの表示 XMapWindow(display, window); // イベントループ for (;;) { XEvent event; XNextEvent(display, &event); if (event.type == Expose) { printf("ウィンドウが再描画されました\n"); } else if (event.type == KeyPress) { printf("キーが押されました。終了します。\n"); break; } } // Xサーバーからの切断 XDestroyWindow(display, window); XCloseDisplay(display); return 0; }
このプログラムでは、次のことを行っています:
XOpenDisplay
関数でXサーバーに接続XCreateSimpleWindow
関数でウィンドウを作成XMapWindow
関数でウィンドウを画面に表示- イベントループを使ってユーザーの操作を処理
UNIX上でのコンパイルと実行
[編集]UNIXシステム上でこのプログラムをコンパイルして実行するには、以下の手順を実行します。
必要なツール
[編集]コンパイルには以下のツールが必要です:
- Cコンパイラ(例:
cc
) - 必要なXライブラリ(
libX11
)
コマンドラインからのコンパイル
[編集]以下のコマンドでプログラムをコンパイルします:
cc -o myxprogram myxprogram.c -lX11
ここで:
-o myxprogram
は出力ファイル名を指定-lX11
はlibX11
ライブラリをリンクするオプション
プログラムの実行
[編集]コンパイルが成功したら、以下のコマンドでプログラムを実行します:
./myxprogram
ウィンドウが表示され、再描画イベントやキー入力に応答するプログラムが動作します。
Makefileの利用
[編集]make
を利用して簡単にコンパイルと実行を管理することもできます。以下は例としてのMakefileです:
CC = cc CFLAGS = -Wall -g LDFLAGS = -lX11 TARGET = myxprogram SRC = myxprogram.c all: $(TARGET) $(TARGET): $(SRC) $(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LDFLAGS) clean: rm -f $(TARGET)
以下のコマンドでコンパイルできます:
make
プログラムをクリーンアップするには:
make clean
まとめ
[編集]この章では、Xサーバーに接続してウィンドウを表示する最初のプログラムを作成しました。また、UNIX環境でのコンパイル方法やMakefileの使用方法について学びました。これを基に、さらに高度なプログラムを構築していきましょう。