Tool Bar で画像を切り替える

VC++ で Tool Bar に表示されたアイコン(画像)をクリックするとメインウインドウの画像が切り替わります。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. ツールバーで切り替える6枚の BMP 画像を用意して下さい。
    次のファイルをプロジェクトのフォルダーに格納して下さい。
    詳細は Tool Bar を作成する を参照して下さい。
    ファイル名 ファイルの説明
    toolbar.cpp ソースプログラム
    toolbar.rc 自前のリソースファイル
    toolbar.h 自前のヘッダーファイル
    Bmp6.bmp Tool Bar に表示する BMP 画像ファイル
    My.lib BMP Object Class のライブラリファイル
    My.h ライブラリのヘッダーファイル
  2. ToolBar を生成するコードです。
    ボタンの幅、高さは0にしておけば自動的にちょうどよい大きさになります。
    今回は GetWindowLong() でインスタンスを取得してみました。
        switch(msg)
        {   case WM_CREATE:
                 hInst= (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
                 InitCommonControls();
                 hToolBar= CreateToolbarEx(
                    hWnd,                   //親ウィンドウ
                    WS_CHILD | WS_VISIBLE,  //ウィンドウスタイル
                    ID_TOOLBAR,             //コントロールID
                    6,                      //イメージの数
                    hInst,
                    ID_BMP,
                    tbb,
                    6,                      //ボタンの数
                    0,                      //ボタンの幅
                    0,                      //ボタンの高さ
                    32,                     //イメージの幅
                    32,                     //イメージの高さ
                    sizeof(TBBUTTON));
                 SendMessage(hToolBar,TB_AUTOSIZE,0,0);
                 break;
        
  3. BMP Object Class と画面に表示する BMP ファイル名の定義です。
    BMP_NO が現在選択されている画像の番号です。
        BMP     *Bmp[6]= { NULL,NULL,NULL,NULL,NULL,NULL }; //BMP Object
        char    name[6][32]=
        {       "c:\\data\\Testdata\\DORAEMON.BMP", "c:\\data\\Testdata\\EMIKO_S.BMP",
                "c:\\data\\Testdata\\GEO.BMP",      "c:\\data\\Testdata\\RINA.BMP",
                "c:\\data\\Testdata\\NANAO.BMP",    "c:\\data\\Testdata\\MOSQUIT.BMP"
        };
        int     BMP_NO= 0;              //現在の画像番号
        
  4. 6枚の画像を入力して BMP Object Class にロードします。
        //画像をロード
        for(i=0; i<6; i++)
        {   Bmp[i]= new BMP(hWnd);
            Bmp[i]->Load(name[i]);
        }
        
  5. BMP_NO で選択されている画像を表示するソースコードです。
    BMP Object Class を使っているので、表示するコードは実質的に一行だけです。
        case WM_PAINT:
            hdc= BeginPaint(hWnd, &ps);
            Bmp[BMP_NO]->Show(0,48);
            EndPaint(hWnd, &ps);
            break;
        
  6. Tool Bar から画像を切り替えるソースコードです。
    Tool Bar のアイコンをクリックすると、メニューから選択された時と同じように WM_COMMAND: がポストされます。
    ここでの処理は BMP_NO を設定して WM_PAINT: を呼ぶだけです。
        case WM_COMMAND:
            switch(LOWORD(wp))
            {   case IDM_BMP1:  BMP_NO= 0;  break;
                case IDM_BMP2:  BMP_NO= 1;  break;
                case IDM_BMP3:  BMP_NO= 2;  break;
                case IDM_BMP4:  BMP_NO= 3;  break;
                case IDM_BMP5:  BMP_NO= 4;  break;
                case IDM_BMP6:  BMP_NO= 5;  break;
            }
            InvalidateRect(hWnd,NULL,TRUE);
            UpdateWindow(hWnd);
            break;
        
  7. WM_DESTROY: で BMP Object Class を開放します。
            case WM_DESTROY:
                for(i=0; i<6; i++)  SAFE_DELETE(Bmp[i]);
                PostQuitMessage(0);
                break;
        

【演習】

  1. 私は My.lib と My.h に登録されている BMP Object Class を使って作成しました。
    BMP ファイルを表示する Object Class を作成してプログラムを完成させて下さい。
  2. 私が提供した Object Class Library を使うときは image object class を使って下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)