ログイン
編集不可のページディスカッション情報添付ファイル
"clear/wm_devel/2011-08-16"の差分

MMA
1と2のリビジョン間の差分
2011-08-16 15:18:21時点のリビジョン1
サイズ: 299
編集者: clear
コメント:
2011-08-16 16:10:20時点のリビジョン2
サイズ: 1876
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 3: 行 3:
 * 資料: http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html  * http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html
こんなのがあったのでざっと読んでみると、割とWindowsでAPI叩いてプログラム書くのに似ている(むしろ逆なのだろう)。GC(Graphics Context)とかハンドルとかは大体同じような理解で良さそう。
行 5: 行 6:
== 「何もしない」やつ ==
ウィンドウが出るだけというアレ。
...
== 「何もしない」やつを作ってみる ==
お約束のウィンドウが出るだけというアレをステップを追いつつ作ってみる。
=== Xサーバへの接続 ===
何はともあれまずXサーバに接続する。必要なのはXサーバの動いているホストのアドレスとディスプレイ番号。ちなみに最初のディスプレイは0番。この辺は普通に使ってるだけでもわかるか。

 XOpenDisplay:: Xサーバと接続する
{{{
Display *XOpenDisplay(char *display_name);
}}}
 * `name`に"<address>:<displaynumber>"の形式で指定する。`NULL`だと`DISPLAY`環境変数を見に行くらしい
 * `Display`型のポインタが帰ってくるので、これを使ってXサーバとやりとりする。失敗すると`NULL`が来る

終了時に接続を切るときは`XCloseDisplay()`を使うらしい。
 XCloseDisplay:: Xサーバとの接続を切る
{{{
int XCloseDisplay(Display *display);
}}}
 * まあ見たとおり
 * これによって全てのウィンドウと確保したリソースが解放されるらしい。プログラムは終了しない

とりあえず接続して終了するだけならこんな感じか。

{{{#!highlight c numbers=no
Display *d;
d = XOpenDisplaY(NULL);
if (!d) {
    fprintf(stderr, "failed to connect x server\n");
    exit(1);
}

/* ... */

XCloseDisplay(d);
}}}

Xクライアントの作成

しばらくXクライアントを作って感覚をつかんでみる。

こんなのがあったのでざっと読んでみると、割とWindowsでAPI叩いてプログラム書くのに似ている(むしろ逆なのだろう)。GC(Graphics Context)とかハンドルとかは大体同じような理解で良さそう。

「何もしない」やつを作ってみる

お約束のウィンドウが出るだけというアレをステップを追いつつ作ってみる。

Xサーバへの接続

何はともあれまずXサーバに接続する。必要なのはXサーバの動いているホストのアドレスとディスプレイ番号。ちなみに最初のディスプレイは0番。この辺は普通に使ってるだけでもわかるか。

XOpenDisplay
Xサーバと接続する

Display *XOpenDisplay(char *display_name);
  • nameに"<address>:<displaynumber>"の形式で指定する。NULLだとDISPLAY環境変数を見に行くらしい

  • Display型のポインタが帰ってくるので、これを使ってXサーバとやりとりする。失敗するとNULLが来る

終了時に接続を切るときはXCloseDisplay()を使うらしい。

XCloseDisplay
Xサーバとの接続を切る

int XCloseDisplay(Display *display);
  • まあ見たとおり
  • これによって全てのウィンドウと確保したリソースが解放されるらしい。プログラムは終了しない

とりあえず接続して終了するだけならこんな感じか。

Display *d;
d = XOpenDisplaY(NULL);
if (!d) {
    fprintf(stderr, "failed to connect x server\n");
    exit(1);
}

/* ... */

XCloseDisplay(d);

clear/wm_devel/2011-08-16 (最終更新日時 2011-11-06 23:19:53 更新者 clear)