FLTK
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
FLTKについて.ここではStable ReleaseであるFLTK1.3を対象と...
----
#contents
----
*FLTKとは [#k5d9e07d]
FLTKはクロスプラットフォームのGUIツールキットである(Linux...
ひととおりのGUIを構築することができ,さらにとても軽い(コ...
また,プログラム自体も非常にすっきりとしている.
例えば,以下は[[FLTK1.3のドキュメント:http://www.fltk.org...
#code_x{{
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
int main(int argc, char **argv)
{
Fl_Window *window = new Fl_Window(340,180);
Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
box->box(FL_UP_BOX);
box->labelfont(FL_BOLD+FL_ITALIC);
box->labelsize(36);
box->labeltype(FL_SHADOW_LABEL);
window->end();
window->show(argc, argv);
return Fl::run();
}
}}
ウィンドウを作り,"Hello, World!"というラベルのボックスを...
13行目でend関数を呼び出すまでの間に生成されたウィジットが...
この例ではFl_Window上にFl_Box(ボックス型ウィジット)を配置...
end関数を呼び出した後,show関数によりウィンドウを可視化し...
以下にWindows 7上で実行した様子を示す.
#ref(fltk_hello_world.jpg,nolink,80%)
このようにとても簡単にGUIを構築できる.
*FLTKのビルド [#xc89191c]
#include(build_fltk,title)
*FLTK+OpenGL [#n32bc623]
-[[Fl_Gl_Windowの派生クラスによるOpenGL描画]]
-[[Fl_Gl_Windowでのキーボード・マウス入力]]
-[[Fl_Gl_Windowでのアニメーション]]
-[[Fl_Gl_Window以外のFLTKウィンドウでOpenGLを使う]]
-[[GLUT互換モード]]
-[[FLTK+OpenGLのアプリケーション例]]
*ダイアログ [#g98efc58]
-[[モーダルダイアログの生成]]
*FLTKに関するメモ [#z1080ae1]
**OpenGL capability [#u751a447]
OpenGLのキャンバスは様々なモードを設定できる
(GLUTのglutInitDisplayModeでGLUT_RGBAやGLUT_DOUBLEなどを...
モードを設定するにはFl_Gl_Windowクラスのmode関数を用いる.
mode関数の引数に設定できるフラグは以下.
--FL_RGB : RGBカラー
--FL_RGB8 : 各色8bitのRGBカラー(通常FL_RGB=FL_RGB8)
--FL_INDEX : インデックスカラー
--FL_SINGLE : ダブルバッファOFF
--FL_DOUBLE : ダブルバッファON
--FL_ACCUM : アキュムレーションバッファ
--FL_ALPHA : アルファチャンネル
--FL_DEPTH : デプスバッファ
--FL_STENCIL : ステンシルバッファ
--FL_MULTISAMPLE : マルチサンプリングによるアンチエリアシ...
例
Fl_Gl_Window win = new Fl_Gl_Window(0, 0, 100, 100, 0);
win->mode(FL_RGB | FL_ALPHA | FL_DOUBLE | FL_DEPTH | FL_...
設定したモードが実行環境上で使えるかどうかは,
[[Fl_Gl_Window::can_do():http://www.fltk.org/doc-1.3/clas...
**メニューのショートカットキー [#q55e4060]
[[Fl_Menu_Bar:http://www.fltk.org/doc-1.3/classFl__Menu__...
でメニュー項目を追加した際,キーボードショートカットを設...
以下のadd関数の第2引数でショートカットキーを設定する.
int Fl_Menu_::add(const char* label,
int shortcut,
Fl_Callback* callback,
void* userdata = 0,
int flags = 0)
shortcutに0を渡すとショートカットキーなし.
設定する場合は,'a'や97のようにASCIIコードを直接指定する.
***修飾キー [#l11fc02c]
CTRLやSHIFT,ALTキーなどの修飾キーと組み合わせる場合は,
FL_CTRL+'a'のように整数で指定するか,文字列で"^a"などと指...
ここで,"^"がCTRLキーを示している.また,SHIFTキーの場合...
修飾キーのコードを以下に示す.
|キー|int|string|
|CTRL|FL_CTRL| ^ |
|SHIFT|FL_SHIFT| + |
|ALT|FL_ALT| # |
|Windowsキー|FL_META|なし|
Mac OS Xだと,CommandキーがFL_META (or FL_COMMAND),Contr...
***特殊キー [#a1953c8e]
矢印やPage Up/Down, EnterなどのキーはFLTKの定義で指定する.
| キー | 定義 |h
| Back Space | FL_BackSpace |
| Tab | FL_Tab |
| Enter | FL_Enter |
| Pause | FL_Pause |
| Scroll Lock | FL_Scroll_Lock |
| Esc | FL_Escape |
| ← | FL_Left |
| ↑ | FL_Up |
| → | FL_Right |
| ↓ | FL_Down |
| Page Up | FL_Page_Up |
| Page Down | FL_Page_Down |
| Home | FL_Home |
| End | FL_End |
| Print Screen | FL_Print |
| Insert | FL_Insert |
| Delete | FL_Delete |
| Num Lock | FL_Num_Lock |
| Caps Lock | FL_Caps_Lock |
***ファンクションキー [#f57e99c7]
ファンクションキーは
FL_F
に数字を足すことで指定する.例えば,F1キーは,
FL_F+1
である.対応するファンクションキーの範囲は,
FL_F_Last
で調べることができる.
**フルスクリーン [#k282cbe6]
ウィンドウをフルスクリーンにするには
[[Fl_Window::fullscreen():http://www.fltk.org/doc-1.3/cla...
関数を用いる(最大化とは異なることに注意).
元に戻すときは,
fullscreen_off(int x, int y, int w, int h)
を用いる.fullscreen_off関数にはウィンドウ位置,サイズを...
フルスクリーン化したときに元々の位置,サイズを記録してお...
以下にフルスクリーンを切り替える関数の例を示す.
#code(C){{
void rxFlWindow::SwitchFullScreen(void)
{
static int is_fullscreen = 0;
static int pos0[2] = { 0, 0 };
static int win0[2] = { 500, 500 };
if(is_fullscreen){
fullscreen_off(pos0[0], pos0[1], win0[0], win0[1]);
is_fullscreen = 0;
}
else{
pos0[0] = x();
pos0[1] = y();
win0[0] = w();
win0[1] = h();
fullscreen();
is_fullscreen = 1;
}
}
}}
ちなみに [[FLTK+OpenGLのアプリケーション例]] のようにOpen...
**よく使うウィジット [#s803d416]
-チェックボックス : [[Fl_Check_Button:http://www.fltk.org...
#code(C){{
Fl_Check_Button *check;
check = new Fl_Check_Button(xs, ys, 25, 25, " check");
check->down_box(FL_DOWN_BOX);
check->callback(OnCheckInertia_s, this);
check->align(Fl_Align(FL_ALIGN_RIGHT)); // FL_ALIGN_LEFT...
}}
-ボタン : [[Fl_Button:http://www.fltk.org/doc-1.3/classFl...
#code(C){{
Fl_Button *button;
button = new Fl_Button(xs, ys, ws, hs, "button");
button->callback(OnButton_s, this);
button->down_box(FL_FLAT_BOX);
button->clear_visible_focus();
}}
-ボックス : [[Fl_Box:http://www.fltk.org/doc-1.3/classFl_...
#code(C){{
Fl_Box *box;
box = new Fl_Box(xs, ys, ws, hs);
box->box(FL_FLAT_BOX);
box->align(FL_ALIGN_INSIDE | FL_ALIGN_WRAP | FL_ALIGN_LE...
box->label("box");
}}
-スライダー : [[Fl_Value_Slider:http://www.fltk.org/doc-1...
#code(C){{
Fl_Value_Slider *slider;
slider = new Fl_Value_Slider(xs, ys, ws, hs, "slider ");
slider->type(FL_FLOAT_INPUT); // FL_FLOAT_INPUT or FL_IN...
slider->callback(OnSlider_s, this);
slider->minimum(0.0);
slider->maximum(1.0);
slider->step(0.01);
slider->value(0.5);
slider->align(Fl_Align(FL_ALIGN_LEFT));
}}
-スピンボックス : [[Fl_Spinner:http://www.fltk.org/doc-1....
#code(C){{
Fl_Spinner *spin;
spin = new Fl_Spinner(xs, ys, ws, hs, "spin ");
spin->type(FL_INT_INPUT);
spin->callback(OnSpin_s, this);
spin->minimum(0);
spin->maximum(10);
spin->step(1);
spin->value(5);
}}
-グループ : [[Fl_Group:http://www.fltk.org/doc-1.3/classF...
-ラジオボタン : [[Fl_Round_Button:http://www.fltk.org/doc...
#code(C){{
Fl_Group *gr = new Fl_Group(xs, ys, ws, hs);
{
gr->box(FL_THIN_UP_FRAME);
xs += 5; ys += 3;
Fl_Round_Button *radio;
radio = new Fl_Round_Button(xs, ys, ws, hs, "radio1");
radio->type(102);
radio->down_box(FL_ROUND_DOWN_BOX);
radio->callback(OnRadio_s, this);
radio->value(1);
radio = new Fl_Round_Button(xs, ys+1*(hs+1), ws, hs, "r...
radio->type(102);
radio->down_box(FL_ROUND_DOWN_BOX);
radio->callback(OnRadio_s, this);
radio = new Fl_Round_Button(xs, ys+2*(hs+1), ws, hs, "r...
radio->type(102);
radio->down_box(FL_ROUND_DOWN_BOX);
radio->callback(OnRadio_s, this);
gr->end();
gr->resizable(0);
}
}}
-ローラー : [[Fl_Roller:http://www.fltk.org/doc-1.3/class...
#code(C){{
Fl_Roller *roller;
roller = new Fl_Roller(xs, ys, width, len);
roller->type(FL_VERTICAL); // FL_VERTICAL or FL_HORIZONTAL
roller->callback(OnRollerX_s, this);
roller->value(0.5);
}}
*リンク [#a63102ae]
-[[FLTK:http://www.fltk.org/index.php]]
-[[Beginner FLTK Tutorial:http://www3.telus.net/public/ro...
-[[Erco's FLTK Cheat Page:http://www.seriss.com/people/er...
終了行:
FLTKについて.ここではStable ReleaseであるFLTK1.3を対象と...
----
#contents
----
*FLTKとは [#k5d9e07d]
FLTKはクロスプラットフォームのGUIツールキットである(Linux...
ひととおりのGUIを構築することができ,さらにとても軽い(コ...
また,プログラム自体も非常にすっきりとしている.
例えば,以下は[[FLTK1.3のドキュメント:http://www.fltk.org...
#code_x{{
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
int main(int argc, char **argv)
{
Fl_Window *window = new Fl_Window(340,180);
Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
box->box(FL_UP_BOX);
box->labelfont(FL_BOLD+FL_ITALIC);
box->labelsize(36);
box->labeltype(FL_SHADOW_LABEL);
window->end();
window->show(argc, argv);
return Fl::run();
}
}}
ウィンドウを作り,"Hello, World!"というラベルのボックスを...
13行目でend関数を呼び出すまでの間に生成されたウィジットが...
この例ではFl_Window上にFl_Box(ボックス型ウィジット)を配置...
end関数を呼び出した後,show関数によりウィンドウを可視化し...
以下にWindows 7上で実行した様子を示す.
#ref(fltk_hello_world.jpg,nolink,80%)
このようにとても簡単にGUIを構築できる.
*FLTKのビルド [#xc89191c]
#include(build_fltk,title)
*FLTK+OpenGL [#n32bc623]
-[[Fl_Gl_Windowの派生クラスによるOpenGL描画]]
-[[Fl_Gl_Windowでのキーボード・マウス入力]]
-[[Fl_Gl_Windowでのアニメーション]]
-[[Fl_Gl_Window以外のFLTKウィンドウでOpenGLを使う]]
-[[GLUT互換モード]]
-[[FLTK+OpenGLのアプリケーション例]]
*ダイアログ [#g98efc58]
-[[モーダルダイアログの生成]]
*FLTKに関するメモ [#z1080ae1]
**OpenGL capability [#u751a447]
OpenGLのキャンバスは様々なモードを設定できる
(GLUTのglutInitDisplayModeでGLUT_RGBAやGLUT_DOUBLEなどを...
モードを設定するにはFl_Gl_Windowクラスのmode関数を用いる.
mode関数の引数に設定できるフラグは以下.
--FL_RGB : RGBカラー
--FL_RGB8 : 各色8bitのRGBカラー(通常FL_RGB=FL_RGB8)
--FL_INDEX : インデックスカラー
--FL_SINGLE : ダブルバッファOFF
--FL_DOUBLE : ダブルバッファON
--FL_ACCUM : アキュムレーションバッファ
--FL_ALPHA : アルファチャンネル
--FL_DEPTH : デプスバッファ
--FL_STENCIL : ステンシルバッファ
--FL_MULTISAMPLE : マルチサンプリングによるアンチエリアシ...
例
Fl_Gl_Window win = new Fl_Gl_Window(0, 0, 100, 100, 0);
win->mode(FL_RGB | FL_ALPHA | FL_DOUBLE | FL_DEPTH | FL_...
設定したモードが実行環境上で使えるかどうかは,
[[Fl_Gl_Window::can_do():http://www.fltk.org/doc-1.3/clas...
**メニューのショートカットキー [#q55e4060]
[[Fl_Menu_Bar:http://www.fltk.org/doc-1.3/classFl__Menu__...
でメニュー項目を追加した際,キーボードショートカットを設...
以下のadd関数の第2引数でショートカットキーを設定する.
int Fl_Menu_::add(const char* label,
int shortcut,
Fl_Callback* callback,
void* userdata = 0,
int flags = 0)
shortcutに0を渡すとショートカットキーなし.
設定する場合は,'a'や97のようにASCIIコードを直接指定する.
***修飾キー [#l11fc02c]
CTRLやSHIFT,ALTキーなどの修飾キーと組み合わせる場合は,
FL_CTRL+'a'のように整数で指定するか,文字列で"^a"などと指...
ここで,"^"がCTRLキーを示している.また,SHIFTキーの場合...
修飾キーのコードを以下に示す.
|キー|int|string|
|CTRL|FL_CTRL| ^ |
|SHIFT|FL_SHIFT| + |
|ALT|FL_ALT| # |
|Windowsキー|FL_META|なし|
Mac OS Xだと,CommandキーがFL_META (or FL_COMMAND),Contr...
***特殊キー [#a1953c8e]
矢印やPage Up/Down, EnterなどのキーはFLTKの定義で指定する.
| キー | 定義 |h
| Back Space | FL_BackSpace |
| Tab | FL_Tab |
| Enter | FL_Enter |
| Pause | FL_Pause |
| Scroll Lock | FL_Scroll_Lock |
| Esc | FL_Escape |
| ← | FL_Left |
| ↑ | FL_Up |
| → | FL_Right |
| ↓ | FL_Down |
| Page Up | FL_Page_Up |
| Page Down | FL_Page_Down |
| Home | FL_Home |
| End | FL_End |
| Print Screen | FL_Print |
| Insert | FL_Insert |
| Delete | FL_Delete |
| Num Lock | FL_Num_Lock |
| Caps Lock | FL_Caps_Lock |
***ファンクションキー [#f57e99c7]
ファンクションキーは
FL_F
に数字を足すことで指定する.例えば,F1キーは,
FL_F+1
である.対応するファンクションキーの範囲は,
FL_F_Last
で調べることができる.
**フルスクリーン [#k282cbe6]
ウィンドウをフルスクリーンにするには
[[Fl_Window::fullscreen():http://www.fltk.org/doc-1.3/cla...
関数を用いる(最大化とは異なることに注意).
元に戻すときは,
fullscreen_off(int x, int y, int w, int h)
を用いる.fullscreen_off関数にはウィンドウ位置,サイズを...
フルスクリーン化したときに元々の位置,サイズを記録してお...
以下にフルスクリーンを切り替える関数の例を示す.
#code(C){{
void rxFlWindow::SwitchFullScreen(void)
{
static int is_fullscreen = 0;
static int pos0[2] = { 0, 0 };
static int win0[2] = { 500, 500 };
if(is_fullscreen){
fullscreen_off(pos0[0], pos0[1], win0[0], win0[1]);
is_fullscreen = 0;
}
else{
pos0[0] = x();
pos0[1] = y();
win0[0] = w();
win0[1] = h();
fullscreen();
is_fullscreen = 1;
}
}
}}
ちなみに [[FLTK+OpenGLのアプリケーション例]] のようにOpen...
**よく使うウィジット [#s803d416]
-チェックボックス : [[Fl_Check_Button:http://www.fltk.org...
#code(C){{
Fl_Check_Button *check;
check = new Fl_Check_Button(xs, ys, 25, 25, " check");
check->down_box(FL_DOWN_BOX);
check->callback(OnCheckInertia_s, this);
check->align(Fl_Align(FL_ALIGN_RIGHT)); // FL_ALIGN_LEFT...
}}
-ボタン : [[Fl_Button:http://www.fltk.org/doc-1.3/classFl...
#code(C){{
Fl_Button *button;
button = new Fl_Button(xs, ys, ws, hs, "button");
button->callback(OnButton_s, this);
button->down_box(FL_FLAT_BOX);
button->clear_visible_focus();
}}
-ボックス : [[Fl_Box:http://www.fltk.org/doc-1.3/classFl_...
#code(C){{
Fl_Box *box;
box = new Fl_Box(xs, ys, ws, hs);
box->box(FL_FLAT_BOX);
box->align(FL_ALIGN_INSIDE | FL_ALIGN_WRAP | FL_ALIGN_LE...
box->label("box");
}}
-スライダー : [[Fl_Value_Slider:http://www.fltk.org/doc-1...
#code(C){{
Fl_Value_Slider *slider;
slider = new Fl_Value_Slider(xs, ys, ws, hs, "slider ");
slider->type(FL_FLOAT_INPUT); // FL_FLOAT_INPUT or FL_IN...
slider->callback(OnSlider_s, this);
slider->minimum(0.0);
slider->maximum(1.0);
slider->step(0.01);
slider->value(0.5);
slider->align(Fl_Align(FL_ALIGN_LEFT));
}}
-スピンボックス : [[Fl_Spinner:http://www.fltk.org/doc-1....
#code(C){{
Fl_Spinner *spin;
spin = new Fl_Spinner(xs, ys, ws, hs, "spin ");
spin->type(FL_INT_INPUT);
spin->callback(OnSpin_s, this);
spin->minimum(0);
spin->maximum(10);
spin->step(1);
spin->value(5);
}}
-グループ : [[Fl_Group:http://www.fltk.org/doc-1.3/classF...
-ラジオボタン : [[Fl_Round_Button:http://www.fltk.org/doc...
#code(C){{
Fl_Group *gr = new Fl_Group(xs, ys, ws, hs);
{
gr->box(FL_THIN_UP_FRAME);
xs += 5; ys += 3;
Fl_Round_Button *radio;
radio = new Fl_Round_Button(xs, ys, ws, hs, "radio1");
radio->type(102);
radio->down_box(FL_ROUND_DOWN_BOX);
radio->callback(OnRadio_s, this);
radio->value(1);
radio = new Fl_Round_Button(xs, ys+1*(hs+1), ws, hs, "r...
radio->type(102);
radio->down_box(FL_ROUND_DOWN_BOX);
radio->callback(OnRadio_s, this);
radio = new Fl_Round_Button(xs, ys+2*(hs+1), ws, hs, "r...
radio->type(102);
radio->down_box(FL_ROUND_DOWN_BOX);
radio->callback(OnRadio_s, this);
gr->end();
gr->resizable(0);
}
}}
-ローラー : [[Fl_Roller:http://www.fltk.org/doc-1.3/class...
#code(C){{
Fl_Roller *roller;
roller = new Fl_Roller(xs, ys, width, len);
roller->type(FL_VERTICAL); // FL_VERTICAL or FL_HORIZONTAL
roller->callback(OnRollerX_s, this);
roller->value(0.5);
}}
*リンク [#a63102ae]
-[[FLTK:http://www.fltk.org/index.php]]
-[[Beginner FLTK Tutorial:http://www3.telus.net/public/ro...
-[[Erco's FLTK Cheat Page:http://www.seriss.com/people/er...
ページ名: