[C++] 222 Visual C++ : アプリのウィンドウアイコン設定 FLTK

[Windows11, Visual C++2017, FLTK 1.3.8, GNU Make 3.81, NO IDE]

ようやくウィンドウアイコンを設定できました。

new演算子でFl_RGB_Imageオブジェクトを作ることにこだわって遠回りしました。new演算子を使わない書き方でようやく成功しました。

今回のは断続的に2日がかりでしんどかったです。一旦諦めた直後にひらめいてあっさり解決しました。FLTKマスターへの道のりはまだまだ遠いです。

まあ仕様が古いといいますかpngファイルのパスだけでアイコン設定できるようにしないとFLTKのユーザーは増えないでしょうね。

以下の手順になります。

1) アイコンのpngファイルをxpmファイルに変換する。フリーのWEBサービス利用可。
2)xpmファイルをエディタで開き、static char*の変数を適当な名前に変える。
3)xpmファイルをincludeして、main関数を以下のように記述する。

#include "icon16.xpm"

Fl_Double_Window* window;

int main(int argc, char** argv) {
    // ウィンドウアイコン設定
    const Fl_Pixmap icon_pix(icon_xpm16);
    const Fl_RGB_Image icon_rgb(&icon_pix);
        
    window = new Fl_Double_Window(50, 50, 660, 480, "COLOR SAMPLE JP");
    window->color(fl_rgb_color(238, 238, 238));
    window->icon(&icon_rgb);

    <以下略>
}
static char *icon_xpm16[] = {
/* columns rows colors chars-per-pixel */
"16 16 14 1 ",
"  c #180614",
". c #006E54",
"X c #016F55",
"o c #ED6D3D",
"O c #EE6D3D",
"+ c #30A36A",
"@ c #3EB370",
"# c #409370",
"$ c #4C9A76",
"% c #1E50A2",
"& c #75B188",
"* c #DAB683",
"= c #CEE4AE",
"- c None",
/* pixels */
"----------------",
"----------------",
"--==  ===....=--",
"--=   ==.+@@@.--",
"--     =.@@@@.--",
"--     =.@@@@.--",
"--==    #.@@XX--",
"--==== ==&..$=--",
"--=Ooo===%====--",
"--ooooo=%%%%==--",
"--oooooo=%%%%%--",
"--oooooo=%%%%%--",
"--ooooo*==%%%=--",
"--=oooo===%%==--",
"----------------",
"----------------"
};