ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

エディット コントロール(テキスト入力ボックス)を作成する

SFREditboxControl クラスを使って、エディット コントロール(テキスト入力ボックス)を作成します。

SFMTYPEDEFCLASS(MyWindow)
class MyWindow : public SFRTitleWindow {
    SFMSEALCOPY(MyWindow)
public:
    MyWindow(Void) static_throws;
    virtual ~MyWindow(Void) { return; }
    
    // テキスト ボックスをポインター型のメンバ変数として定義する
    SFREditboxControlPtr     _editbox;      // テキスト ボックス
    
    HANDLER_DECLARE_VOIDCONTROL(OnEditboxControl)
};

// コンストラクタ (エラー処理は省略)
MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(),
    SFXRectangle(20, 20, 200, 250), "my window") static_throws
{

    // テキスト ボックスの作成
    // 第 1 引数 : 親レスポンダ
    // 第 2 引数 : テキスト ボックス の位置とサイズ
    // 第 3 引数 : テキスト ボックス の名前
     _editbox = new SFREditboxControl(this, 
                                     SFXRectangle(20, 50, 150, 25), 
                                     "Editbox");
                                     
    // 最大文字数を設定する
    _editbox->SetMaxSize(255);

    // テキストの入力後やフォーカスが外れたときの
    // イベントハンドラの設定
    editbox->RegisterHandler(SREVT_CONTROL, 
                             HANDLER_BEFORE,
                             HANDLER_FUNCTION(OnEditboxControl)));
    }

    // テキスト ボックス上でセレクトキーを押したときに
    // 入力モードに移るようにセットする
    // ( SelectHandler は SophiaFramework が
    // 提供するセレクトキー用のハンドラ )
    RegisterHandler(SFEVT_KEY, 
                    AVK_SELECT, 
                    HANDLER_AFTER,
                    HANDLER_FUNCTION(SelectHandler)));
    }
    
    return;
}

// エディット コントロール ハンドラ 
// ( テキストの入力後、或いはフォーカスが外れたときに起動する ) 
HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnEditboxControl, result, control)
{
    // ターゲットを外す
    control->SetStatusTarget(false);

    if (result) { // テキストの入力後の場合
        
        // フォーカスを次へ移動する
        FocusNext();

    } // フォーカスが外れた場合
    else {
        //...
    }
}