SPTK ライブラリについて
SPTK ライブラリは、ここのサンプルプログラムを動作させるために作った、シンプルな GUI ライブラリです。
サンプルプログラムを複数 OS で動作できるようにと思って、既存の GUI ライブラリを探してみたのですが、なかなか丁度良いのが見つからなかったので、自分で作りました。
ここでは、SPTK ライブラリの使い方について、簡単に説明しておきます。
サンプルプログラムを複数 OS で動作できるようにと思って、既存の GUI ライブラリを探してみたのですが、なかなか丁度良いのが見つからなかったので、自分で作りました。
ここでは、SPTK ライブラリの使い方について、簡単に説明しておきます。
基本
以下は、ウィンドウを表示するだけのプログラムです。
ウィンドウの閉じるボタンを押すか、ウィンドウ内でマウスの左ボタンを押すと終了します。
001_sptk.c
ウィンドウの閉じるボタンを押すか、ウィンドウ内でマウスの左ボタンを押すと終了します。
001_sptk.c
#include "sptk.h" void winhandle(SPTK_EVENT *ev) { switch(ev->type) { case SPTK_EVENT_BTTDOWN: if(ev->mouse.btt == SPTK_MOUSEBTT_LEFT) sptk_quit(); break; case SPTK_EVENT_WINDOW_CLOSE: sptk_quit(); break; } } int main() { sptk_init("test", 300, 300); sptk_window_set_handle(winhandle); sptk_run(); return 0; }
コンパイル
SPTK ライブラリを作成
サンプルプログラムのコンパイル
環境により、コンパイル方法が異なります。
SPTK ライブラリのヘッダファイル (sptk.h) のパスや、ライブラリファイルのパスは、各自の環境に合わせて置き換えてください。
※ libX11、libXext のリンクが必要です。
<例> "~/sptk" にヘッダファイル・ライブラリがある場合
リンカに以下のオプションを追加するか、サンプルプログラム内の main() を WinMain() に書き換えてください。
SPTK ライブラリのヘッダファイル (sptk.h) のパスや、ライブラリファイルのパスは、各自の環境に合わせて置き換えてください。
Linux
test_sptk.c をコンパイルする場合。※ libX11、libXext のリンクが必要です。
$ cc -o test_sptk -I<SPTKヘッダファイルのパス> test_sptk.c <SPTKライブラリのパス> -lX11 -lXext
<例> "~/sptk" にヘッダファイル・ライブラリがある場合
$ cc -o test_sptk -I~/sptk test_sptk.c ~/sptk/libsptk.a -lX11 -lXext
Windows
※ サンプルプログラム内では、WinMain() を使わずに main() をエントリポイントとしているので、そのままではエラーが出ます。リンカに以下のオプションを追加するか、サンプルプログラム内の main() を WinMain() に書き換えてください。
MinGW | -mwindows |
---|---|
Visual C++ | /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup |
解説
終了処理について
SPTK では、C 標準関数の atexit() を使うことにより、アプリケーションの終了時 (main 関数の return 時や、exit 関数呼び出し時) に自動で終了処理関数が呼び出されるようになっているので、終了処理に関しては意識する必要はありません。
エラーが出た場合
SPTK では、メモリが確保できなかった場合など、致命的なエラーが出た場合は、exit(1) が呼び出されて、即座にアプリケーションが終了します。
なので、エラーに関しても気にする必要はありません。
なので、エラーに関しても気にする必要はありません。
各関数
sptk_init(title, w, h) で、初期化とウィンドウの作成を行います。
ウィンドウのタイトルバーに表示する名前と、ウィンドウの幅・高さを指定します。
ウィンドウのサイズは、タイトルバーや枠などを含まないサイズです。
なお、この時点ではまだウィンドウは表示されていません。
sptk_window_set_handle() で、ウィンドウに関するイベントを処理する関数をセットします。
なお、セットしなかった場合は、デフォルトのハンドラが使われます。
sptk_run() で、ウィンドウを表示して、メインループを実行します。
メインループは、sptk_quit() が呼ばれると終了します。
ウィンドウのタイトルバーに表示する名前と、ウィンドウの幅・高さを指定します。
ウィンドウのサイズは、タイトルバーや枠などを含まないサイズです。
なお、この時点ではまだウィンドウは表示されていません。
sptk_window_set_handle() で、ウィンドウに関するイベントを処理する関数をセットします。
なお、セットしなかった場合は、デフォルトのハンドラが使われます。
sptk_run() で、ウィンドウを表示して、メインループを実行します。
メインループは、sptk_quit() が呼ばれると終了します。
イベントハンドラ
ウィンドウ内でイベントが起きると、sptk_window_set_handle() でセットされた関数が呼ばれます。
void handle(SPTK_EVENT *ev);
SPTK_EVENT 構造体
int type | イベントの種類 |
---|---|
SPTK_WIDGET *widget | イベントが起きたウィジェットのポインタ。 NULL でメインウィンドウ自体。 |
SPTK_MOUSEEVENT mouse | SPTK_EVENT_BTTDOWN/BTTUP/MOUSEMOVE イベント時のデータが入っています。 x,y が座標、btt がボタン番号、mod が装飾キーです。 |
SPTK_KEYEVENT key | SPTK_WINDOW_KEYDOWN イベント時のデータが入っています。 code が文字コードです。 |
イベントの種類
SPTK_EVENT_WINDOW_CLOSE | ウィンドウの「閉じる」ボタンが押された。 通常は sptk_quit() を呼び出して、アプリケーションを終了させます。 |
---|---|
SPTK_EVENT_WINDOW_KEYDOWN | ウィンドウ上でキーが押された |
SPTK_EVENT_BTTDOWN | マウスのボタンが押された |
SPTK_EVENT_BTTUP | マウスのボタンが離された |
SPTK_EVENT_MOUSEMOVE | マウスカーソルが移動した |