ダイアログボックス(Visual Studio 2010 Professional)のボタンコントロールでPNGをレンダリングしようとしています。いくつかの調査を行った後、私はBMPファイルに対して機能する次の方法を見つけました。
HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
SendMessage(GetDlgItem(hDlg, IDC_BUTTON1), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
ただし、これはPNGファイルでは機能しません。さらに調査した結果、GDI+を使用してこれを行う簡単な方法があることがわかりました。
HBITMAP hBitmap;
Gdiplus::Bitmap b(L"a.png");
b.GetHBITMAP(NULL, &hBitmap);
SendMessage(GetDlgItem(hDlg, IDC_BUTTON1), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
プログラムの他の場所ではGDI+を使用していませんが、この単純なタスクを実行するために、ヘッダーを含め、ライブラリにリンクして初期化する必要があります。このトラブルのすべての価値がありますか?これを行うためのより標準的な方法はありますか?
1つのボタンで複数のPNG(一部は透明)をレンダリングする予定です。
編集:HBITMAPの作成に使用している(わずかに変更された)CreateDIBSectionFromBitmapSource()関数は、次の場所にあります。