我正在尝试在我的对话框(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+,但我仍然需要包含标题、链接到库并初始化它以完成这个简单的任务。值得所有这些麻烦吗?有没有更标准的方法来做到这一点?
我计划在一个按钮上渲染多个 PNG(有些是透明的)。
编辑:我用来创建 HBITMAP 的(稍作修改的)CreateDIBSectionFromBitmapSource() 函数可以在这里找到: