モーダルダイアログの生成
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
*モーダルダイアログ [#n5e4d850]
[[Fl_Window:http://www.fltk.org/doc-1.3/classFl__Window.h...
[[Fl_Window:http://www.fltk.org/doc-1.3/classFl__Window.h...
***ダイアログクラス [#ob3f16da]
ここでは例としてFl_Windowを派生した以下のrxFlTextDialogク...
rxFlTextDialogクラスではテキストインプット1つとOK,Cancel...
#code(C){{
#include <string>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Button.H>
using namespace std;
//-------------------------------------------------------...
//! rxFlTextDialogクラス - fltkによるテキストダイアログ
//-------------------------------------------------------...
class rxFlTextDialog : public Fl_Window
{
protected:
Fl_Window *m_pParent; //!< 親クラス
Fl_Input *m_pInputText; //!< テキスト入力
public:
string m_strText;
public:
//! コンストラクタ
rxFlTextDialog(int w_, int h_, const char* title, con...
: Fl_Window(w_, h_, title), m_pInputText(0)
{
m_pParent = (Fl_Window*)parent;
m_strText = "";
int margin = 12;
int xs, ys;
int ws, hs;
{
Fl_Scroll *g = new Fl_Scroll(0, 0, w(), h()-4...
g->box(FL_FLAT_BOX);
xs = margin;
ys = margin;
ws = w()-2.5*margin;
hs = h()-(margin+50);
//
// テキスト入力
//
Fl_Group* sg = new Fl_Group(xs, ys, ws, hs, l...
{
sg->box(FL_DOWN_BOX);
sg->labelsize(12);
sg->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE);
int dx = strlen(text_label)*10;
ys += 25;
m_pInputText = new Fl_Input(xs+dx, ys, ws-(dx+margin*...
sg->resizable(NULL);
sg->end();
}
g->end();
Fl_Group::current()->resizable(g);
}
{
ws = 80;
hs = 25;
xs = w()-2*(ws+margin);
ys = h()-(margin+hs);
Fl_Button *button;
// OKボタン
button = new Fl_Button(xs, ys, ws, hs, "OK");
button->callback(OnButtonOK_s, this);
button->down_box(FL_UP_BOX);
// OKボタン
button = new Fl_Button(xs+(ws+margin), ys, ws...
button->callback(OnButtonCancel_s, this);
button->down_box(FL_UP_BOX);
}
resizable(this);
end();
}
//! デストラクタ
~rxFlTextDialog()
{
if(m_pInputText) delete m_pInputText;
}
public:
// イベントハンドラ
static void OnButtonOK_s(Fl_Widget *widget, void* x)
{
((rxFlTextDialog*)x)->OnButtonOK();
}
inline void OnButtonOK(void)
{
m_strText = m_pInputText->value();
hide();
}
static void OnButtonCancel_s(Fl_Widget *widget, void*...
{
((rxFlTextDialog*)x)->OnButtonCancel();
}
inline void OnButtonCancel(void)
{
hide();
}
};
}}
***ダイアログの呼び出し [#db24ad77]
上記のダイアログクラスを呼び出す際の例を以下に示す.
#code(C){{
rxFlTextDialog *dlg = new rxFlTextDialog(300, 150, "titl...
dlg->set_modal();
dlg->show();
while(dlg->visible()){
Fl::wait();
}
if(!dlg->m_strText.empty()){
cout << "Input : " << dlg->m_strText << endl;
}
delete dlg;
}}
set_modal()でモーダルウィンドウにして,
show()でダイアログを表示.
上記のコードでダイアログを表示した結果は以下(Windows10環...
#ref(fltk_modal_dialog.jpg,nolink,100%);
終了行:
*モーダルダイアログ [#n5e4d850]
[[Fl_Window:http://www.fltk.org/doc-1.3/classFl__Window.h...
[[Fl_Window:http://www.fltk.org/doc-1.3/classFl__Window.h...
***ダイアログクラス [#ob3f16da]
ここでは例としてFl_Windowを派生した以下のrxFlTextDialogク...
rxFlTextDialogクラスではテキストインプット1つとOK,Cancel...
#code(C){{
#include <string>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Button.H>
using namespace std;
//-------------------------------------------------------...
//! rxFlTextDialogクラス - fltkによるテキストダイアログ
//-------------------------------------------------------...
class rxFlTextDialog : public Fl_Window
{
protected:
Fl_Window *m_pParent; //!< 親クラス
Fl_Input *m_pInputText; //!< テキスト入力
public:
string m_strText;
public:
//! コンストラクタ
rxFlTextDialog(int w_, int h_, const char* title, con...
: Fl_Window(w_, h_, title), m_pInputText(0)
{
m_pParent = (Fl_Window*)parent;
m_strText = "";
int margin = 12;
int xs, ys;
int ws, hs;
{
Fl_Scroll *g = new Fl_Scroll(0, 0, w(), h()-4...
g->box(FL_FLAT_BOX);
xs = margin;
ys = margin;
ws = w()-2.5*margin;
hs = h()-(margin+50);
//
// テキスト入力
//
Fl_Group* sg = new Fl_Group(xs, ys, ws, hs, l...
{
sg->box(FL_DOWN_BOX);
sg->labelsize(12);
sg->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE);
int dx = strlen(text_label)*10;
ys += 25;
m_pInputText = new Fl_Input(xs+dx, ys, ws-(dx+margin*...
sg->resizable(NULL);
sg->end();
}
g->end();
Fl_Group::current()->resizable(g);
}
{
ws = 80;
hs = 25;
xs = w()-2*(ws+margin);
ys = h()-(margin+hs);
Fl_Button *button;
// OKボタン
button = new Fl_Button(xs, ys, ws, hs, "OK");
button->callback(OnButtonOK_s, this);
button->down_box(FL_UP_BOX);
// OKボタン
button = new Fl_Button(xs+(ws+margin), ys, ws...
button->callback(OnButtonCancel_s, this);
button->down_box(FL_UP_BOX);
}
resizable(this);
end();
}
//! デストラクタ
~rxFlTextDialog()
{
if(m_pInputText) delete m_pInputText;
}
public:
// イベントハンドラ
static void OnButtonOK_s(Fl_Widget *widget, void* x)
{
((rxFlTextDialog*)x)->OnButtonOK();
}
inline void OnButtonOK(void)
{
m_strText = m_pInputText->value();
hide();
}
static void OnButtonCancel_s(Fl_Widget *widget, void*...
{
((rxFlTextDialog*)x)->OnButtonCancel();
}
inline void OnButtonCancel(void)
{
hide();
}
};
}}
***ダイアログの呼び出し [#db24ad77]
上記のダイアログクラスを呼び出す際の例を以下に示す.
#code(C){{
rxFlTextDialog *dlg = new rxFlTextDialog(300, 150, "titl...
dlg->set_modal();
dlg->show();
while(dlg->visible()){
Fl::wait();
}
if(!dlg->m_strText.empty()){
cout << "Input : " << dlg->m_strText << endl;
}
delete dlg;
}}
set_modal()でモーダルウィンドウにして,
show()でダイアログを表示.
上記のコードでダイアログを表示した結果は以下(Windows10環...
#ref(fltk_modal_dialog.jpg,nolink,100%);
ページ名: