[C++]102 FLTK : Fl_Windowの複数表示

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

コンソールが表示される実行ファイルとappファイルで挙動が異なることが多いため、appファイルで出力を確認できる2窓の開発用アプリを用意しました。

Name欄から取得した文字列からひらがなを抽出してGUI内位置検索したものの、結果を表示させても該当なしになる現象を動画に収めています。右Windowから分かるように抽出したひらがなは文字化けしています。

Fl_Window *window2;
Fl_Toggle_Button *tgl_btn;

int main(int argc, char **argv) {

    Fl_Window *window = new Fl_Window(50,50,660,480,"Color Sample");
    window->color(fl_rgb_color(238,238,238));

    <中略>

    // サブWindow表示切り替え用トグルボタン
    tgl_btn = new Fl_Toggle_Button(602,227,50,15,"W表示");
    tgl_btn->labelsize(12);
    tgl_btn->callback(showSubWindow);

    window->end();
    window->show(argc, argv);
    
    // サブWindow
    window2 = new Fl_Window(750,50,360,480,"出力用");
    window2->color(fl_rgb_color(238,238,238));

    // output
    output_line2 = new Fl_Multiline_Output(0,0,360,480,"");
    output_line2->textsize(12);

    window2->end();
    window2->show(argc, argv);

    return Fl::run();
}
extern Fl_Window *window2;
extern Fl_Toggle_Button *tgl_btn;

void showSubWindow(Fl_Widget*, void*){
    int onoff_btn = tgl_btn->value();
    
    if (onoff_btn == 1){
        window2->hide();
    } else {
        window2->show();
    }
}

[C++]101 FLTK : 同名関数の使用

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

製作中のカラーアプリはCode欄から取得したカラーコードの有無を検索し、ボタンのタブ内位置を表示する機能を搭載していますが、その際にFl_Boxのカラー表示も反映するようにしました。

callback用のshowColor関数を使い回します。引数が異なるのであれば同名の関数設定が可能です。知ってはいましたが初めて使います。もちろん関数の内容が違っていても構いません。

本当はJava(Swing)のdoClickメソッドのようにプログラムから表示ボタンを押させたかったのですが、FLTKドキュメントを隅々まで調べても方法が見つかりませんでした。

// コールバック用
void showColor(Fl_Widget*, void*){
	onoff_zero = zero_rbtn->value();
    onoff_sharp = sharp_rbtn->value();
    onoff_hex = hex_rbtn->value();
    onoff_rgb = rgb_rbtn->value();
    
    if (onoff_zero == 1){
        ToZeroConvert();
    } else if (onoff_sharp == 1){
        ToSharpConvert();
    } else if (onoff_hex == 1){
        ToHexConvert();
    } else {
        ToRGBConvert();
    }
}

// 通常用
void showColor(){
	onoff_zero = zero_rbtn->value();
    onoff_sharp = sharp_rbtn->value();
    onoff_hex = hex_rbtn->value();
    onoff_rgb = rgb_rbtn->value();
    
    if (onoff_zero == 1){
        ToZeroConvert();
    } else if (onoff_sharp == 1){
        ToSharpConvert();
    } else if (onoff_hex == 1){
        ToHexConvert();
    } else {
        ToRGBConvert();
    }
}

[C++]100 FLTK : ラジオボタンの逆送り

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

とりあえずJavaからの移植が完了しましたが、色々物足りない箇所が出てきたので手を加えていきます。

まずはカラーコードのタイプを順送りで変えているところに逆送りボタンを追加しました。

次はカラー表示の履歴を記録し、進む、戻るボタンで変えられるようにします。

void prevType(Fl_Widget*, void*){
	onoff_zero = zero_rbtn->value();
    onoff_sharp = sharp_rbtn->value();
    onoff_hex = hex_rbtn->value();
    onoff_rgb = rgb_rbtn->value();

    if (onoff_zero == 1){
        onoff_zero = zero_rbtn->value(false);
        onoff_rgb = rgb_rbtn->value(true);
        ToRGBConvert();
    } else if (onoff_sharp == 1){
        onoff_sharp = sharp_rbtn->value(false);
        onoff_zero = zero_rbtn->value(true);
        ToZeroConvert();
    } else if (onoff_hex == 1){
        onoff_hex = hex_rbtn->value(false);
        onoff_sharp = sharp_rbtn->value(true);
        ToSharpConvert();
    } else {
        onoff_rgb = rgb_rbtn->value(false);
        onoff_hex = hex_rbtn->value(true);
        ToHexConvert();
    }
}