spComponentは,C言語で書かれたマルチプラットホームGUIツールキットです. このチュートリアルでは, そのspComponentを使用してアプリケーションを作成する方法を説明します. C言語についての知識があることを想定して説明を行っていますので, C言語についての知識がない人は,まず,C言語に関する本を読んでおくことをお勧めします.
また,spComponentは, オブジェクト指向的なプログラミングスタイルによって実装されているため, ある程度オブジェクト指向の考え方を理解していた方が良いですが, 知らなくてもアプリケーションの作成は可能です.
ここでは,例題のプログラムに用いるインクルードファイル, 関数を中心に解説を行います.ここで説明するものは, このツールキットを使用する上で重要なものばかりです. なお,spComponentでは,GUIの部品のことをコンポーネントと呼んでいます.
#include <sp/spBaseLib.h>
#include <sp/spComponentLib.h>
これらのファイルを読み込むとspComponentを使用することができます.
これらのファイルは,
spBaseとspComponentに関連するインクルードファイルのすべてを読み込むものですので,
自分の必要とするインクルードファイルのみを読み込むというのでも構いません.
次に,spMain関数が定義されているインクルードファイルを読み込みます. spMain関数とは,main関数と本質的には同じものです. これはWindowsやMacとの互換性のために用意されています. つまり,spComponentライブラリを用いる場合は, main関数の代わりにspMain関数を用いることになります. spMain関数は, 次のインクルードファイルを読み込むことで使用できるようになります. プログラム中でコンソールを用いたい場合には,spMain.hを読み込み, プログラム中でコンソールを用いない場合は,spComponentMain.h を読み込んで下さい.ただし,両方のファイルを読み込んではいけませんし, spMain関数のあるソースファイル以外で, このインクルードファイルを読み込んではいけません. ここでの操作を行わなかった場合は,WindowsやMacでコンパイルが失敗するか, 実行時にエラーになります(最悪の場合,プログラムが暴走します).
#include <sp/spMain.h>
または,
#include <sp/spComponentMain.h>
int spMain(int argc, char *argv[]);
spTopLevel spInitialize(int *argcp, char **argvp, ...);
この関数を用いて初めてspComponentを使用することができます.
返り値は,spTopLevel型です.
このspTopLevelは,後で説明するspMainLoop関数の引数にもなります.
spComponent spCreateMainFrame(char *name, ...);
spComponent spCreateFrame(char *name, ...);
独立したウィンドウを作成します.nameには,コンポーネントの名前を記述します.
可変引数の部分は,ウィンドウに設定するパラメータを記述し,
最後の引数は,NULLとします.
パラメータの記述方法は,まずパラメータ名を記述し,
その後に値を記述します.spCreateMainFrameとspCreateFrameの違いは,
spCreateMainFrameにより作成されたウィンドウを閉じると,
プログラムが終了するのに対し,spCreateFrame
により作成されたウィンドウを閉じても終了しません.ただし,
存在するウィンドウが一つの場合には,
どちらの関数を用いてもプログラムが終了するようになっています.
なお,これらの関数により作成されたウィンドウは,
spPopupWindowを呼ばなければ可視化されません.
返り値は,spComponentとなっていますが, spComponentライブラリのほとんどの コンポーネントがspComponent型となっています.
spComponent spCreatePushButton(spComponent parent, char *name, ...);
プッシュボタンを作成します.parentに親コンポーネントを指定し,
nameにコンポーネントの名前を指定します.
可変引数の部分は,プッシュボタンに設定するパラメータを記述し,
最後の引数は,NULLとします.例題では,
ここにSppCallbackFuncパラメータを設定しています.このパラメータは,
コンポーネントのデフォルトのコールバック関数を設定できます.
プッシュボタンの場合は,ボタンが押されたときに呼び出される関数となります.
例題では,ボタンを押すと単に終了するだけですから,
あらかじめ用意されているspQuitCBを用いました.
ここは自分の定義した関数でも構いません.
自分で定義するときは,
void *function(spComponent component, void *data);
という形式にして下さい.
引数dataには,SppCallbackDataパラメータに設定した変数が入ります.
また,ボタンなどのコンポーネントでは, nameに指定したものがそのままラベルになります. なお,プッシュボタンだけでなく, ほとんどのコンポーネント作成関数が同じ関数の形状をしていますので, PushButtonの部分を別の名前に書き換えるだけで, 違うコンポーネントを作成することができます.
void spPopupWindow(spComponent component);
ウィンドウをポップアップします.
ウィンドウは,この関数を呼ばなければ可視化されません.
int spMainLoop(spTopLevel toplevel);
メインループです.引数にspInitialize関数で得た
spTopLevelを入力して下さい.
この関数は,spMain関数の最後に記述し,これをspMain
の戻り値として下さい.
hello.c
#include <stdio.h>
#include <sp/spBaseLib.h>
#include <sp/spComponentLib.h>
#include <sp/spComponentMain.h>
int spMain(int argc, char *argv[])
{
spTopLevel toplevel;
spComponent frame;
/* initialize toolkit */
toplevel = spInitialize(&argc, &argv, NULL);
/* create main window */
frame = spCreateMainFrame("Hello", NULL);
/* create push button */
spCreatePushButton(frame, "Hello World",
SppCallbackFunc, spQuitCB,
NULL);
/* popup window */
spPopupWindow(frame);
/* main loop */
return spMainLoop(toplevel);
}
このファイルをhello.cとして保存してコンパイルすれば,
実行ファイルを作成することができます.
コンパイルの方法は,次で説明します.
Windows環境においては,他のアプリケーションと同様,Visual Studioを使用します. WindowsでCygwinを用いる場合は,下記で説明するUNIX環境と同様に, Makefileを作成してコンパイルすることもできますが,現在は推奨していません. Visual Studioを用いる場合の詳細については, Visual Studio環境の項を参照して下さい.
UNIX環境(LinuxやMac OS Xを含みます)において,spComponentを使用したアプリケーションをコンパイルするためには, 以下の方法のいずれかを選択する必要があります.
Androidについては,Android版での注意点のページを, Mac OS 8・9については,Mac OS 8・9のページを 参照して下さい.
ここでは,Visual Studio環境でのコンパイル方法について解説します. ただし,Visual Studioのバージョンの違いによって, 方法が微妙に違うと思われますので, 自分のバージョンに合わせて読み換えて下さい. ここではVisual Studio 2008での方法を説明します.
ここでは,Makefileの書き方について説明します. なお,spComponentライブラリは, 通常のライブラリと同じようにリンクさせることもできますので, Makefile の書き方に詳しい人は,ここでの説明は無視しても構いません. また,ここで作成したMakefileは,Visual Studio環境では動作しないので, 注意して下さい(Cygwin環境では動作します).
まず,上記のhello.c用のMakefileの内容を以下に示します.
USE_CONSOLE = y USE_GUI = y #USE_GCC = y TOP = /usr/local PROGRAM = hello SRCS = hello.c HDRS = USRCFLAGS = USRLDFLAGS = CPU = linux DEST = $(HOME)/bin include $(TOP)/lib/sp/prog.rules
それでは,このMakefileの記述について順に解説します.
このようにMakefileを作成したら,あとは `make' を実行するだけで実行ファイルを作成することができます. 実行ファイルをインストールする場合は,`make install'を実行して下さい. また,`make clean'を実行すれば,オブジェクトファイルが消去されます.
また,UNIX環境において,Motifとgtk+の両方がインストールされている場合は, USE_MOTIF=yという記述を加えればMotifがリンクされ, USE_GTK=yという記述を加えればgtk+がリンクされます. どちらも指定しない場合は,CPUの値に応じてどちらを使用するかが決定されます. ただし,一部の環境ではUSE_GTK=yは無視されます. なお,gtk+のバージョンを2もしくは3にする場合は,USE_GTK=y の代わりに,それぞれUSE_GTK2=yもしくはUSE_GTK3=yを追加します.
この場合のように,Motifとgtk+を切り替えたい場合は, 実行ファイルのみを書き換えれば切り替わるので, 分割コンパイルを行う場合でも`make clean'などを実行する必要は通常はありません (うまくコンパイルできない場合は,`make clean'が必要になる場合があります).
なお,ここで解説したようなMakefileのテンプレートは, `$(TOP)/lib/sp/MakeProg.tmpl'に用意されています.
Mac OS Xでも同様にMakefileを用います. ただし,現在の所,GUIアプリケーションの作成や,プラグインの作成にはXcodeを 用いる必要があります.
Last modified: "2012-09-17 03:15:13 hideki"