ICON を設定して BMP 画像を表示する

VC++ で自分専用のアイコン設定と、BMP 画像の表示です。
Main.rc を直接タイプしてリソースを全て自前で作成します。

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

プロジェクトの作成

  1. 空の新規プロジェクト(BmpRC)を作成します。
  2. 次のファイルをプロジェクトのフォルダーに格納して下さい。
    Main.cpp はプログラムの説明を参考にして各自で作成して下さい。
    Main.rc は、この後に掲載しています。
    Main.cpp メインプログラム
    Main.rc 自前で作成したリソースファイル
    kishi.bmp 表示する BMP 画像
    Main.ico 自分専用のアイコン
  3. Main.cpp と Main.rc を [プロジェクト][既存項目の追加] からプロジェクトに追加します。
    今回は resource.h を使わずにプログラムしています。
  4. ICON と BMP 画像を定義したリソースファイル(Main.rc)です。
    「リソースの追加」から作成すると、かなりの行が作成されますが、本当に必要なのは数行だけです。
    /////////////////////////////////////////////////////////////////////////////
    //
    // Bitmap
    //
    
    IDB_BITMAP1             BITMAP  DISCARDABLE     "kishi.bmp"
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // Icon
    //
    
    IDI_MYICON              ICON    DISCARDABLE     "Main.ico"
    
  5. ビルドに続いて実行を行います。
    ウインドウの左上隅に自前のアイコンが表示されて、ウインドウに画像が表示されたら完成です。

プログラムの説明

  1. ウインドウに「アイコン」を設定するソースコードです。
    "IDI_MYICON" が「""」で囲われていることに注目して下さい。
        WNDCLASS wc = { CS_CLASSDC,WndProc,0L,0L,hInst,
                        LoadIcon(hInst,"IDI_MYICON"),
                        LoadCursor(NULL,IDC_ARROW),
                        (HBRUSH)GetStockObject(WHITE_BRUSH),NULL,NAME };
        
  2. WM_PAINT: から ViewBMP() 関数を呼び出して画像を表示します。
    リソースから画像を表示するソースコードは BMP 画像を表示する を参照して下さい。
            case WM_PAINT:
                 hdc= BeginPaint (hWnd, &ps);
                 ViewBMP(hWnd,"IDB_BITMAP1",20,20);
                 EndPaint(hWnd, &ps);
                 break;
        

【演習】

  1. ViewBMP() 関数を作成してプログラムを完成して下さい。
  2. 黒を透明色に設定して描画して下さい。
    透明色を設定した描画は、BitBlt() の代わりに TransparentBlt() を使うだけです。
    RGB(0,0,0) が透明に設定する色の指定です。
    TransparentBlt() を使うときは wingdi.h を取り込んで msimg32.lib をリンクして下さい。
        #include    <wingdi.h>
        #pragma     once
        #pragma     comment(lib,"msimg32.lib")
    
        BitBlt(hdc,xp,yp,bmp.bmWidth,bmp.bmHeight,hmdc,0,0,SRCCOPY);
    
        TransparentBlt(hdc,xp,yp,bmp.bmWidth,bmp.bmHeight,hmdc,0,0,
                       bmp.bmWidth,bmp.bmHeight,RGB(0,0,0));
        

【メモ】

リソースを自前で作成したときは、追加のリソースも自前で作成して下さい。
自前のリソースにプロジェクトからリソースを追加しようとすると、意味不明のエラーが発生することがあります。
直接の原因はリソースファイル(.rc) の先頭で Windows.h が取り込まれていないことですが、これ以外にも色々あるようです。

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