我使用Visual Studio 2008,我在资源视图中加载了PNG文件,并将其分配给IDB_BANG_PNG。
优化校准称为IDC_STATIC15。
我无法将PNG加载到图片控件中。
LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
// Way of loading a bmp with a mask perhaps? Or a PNG file programatically?
static HBRUSH hBrushStatic;
HBITMAP hBmp = LoadBitmap(hDlg,MAKEINTRESOURCE(IDB_BANG_PNG));
switch(message)
{
case WM_INITDIALOG:
CheckDlgButton(hDlg, IDC_CHECK, FALSE);
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
// Bitmap version is IDB_BANG, PNG is at IDB_BANG_PNG
// IDC_STATIC15 is the picture frame
HWND item = GetDlgItem(hDlg,IDC_STATIC15);
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp);
return TRUE;
// .... snip
当涉及到Win32 / GUI开发,做一个快速的项目并让她困住时,我很天真,任何帮助都表示赞赏。
答案 0 :(得分:4)
这可以使用GDI+和bitmap class:
Bitmap oBmp(L"D:\\test.png");
HBITMAP hBmp;
oBmp.GetHBITMAP(0, &hBmp);
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp);
一些警告。您的控件需要SS_BITMAP样式。不要忘记包含gdiplus.h及其库。您需要初始化(GdiplusStartup)并关闭GDI +。 释放所有系统资源就在你身上。
答案 1 :(得分:2)
我认为LoadBitmap
或任何其他普通的GDI函数(例如LoadImage
)都不会加载PNG。
您可以使用图片编辑工具将资源保存为32位BMP,然后将LoadImage
与LR_CREATEDIBSECTION
一起使用。
或者您可以使用将PNG文件加载到DIBSECTION中的库。除了BMP之外,GDI +还将加载PNG和JPG。
OLE自动化库还有一个IPicture接口,您可以使用各种图像类型进行实例化,然后获取基础DIBSECTION。使用起来很尴尬,特别是如果你不熟悉COM。请参阅OleLoadPicture作为起点。
答案 2 :(得分:0)
就个人而言,我使用CPictureEx课程。我认为它不支持png,而是支持bmp,jpeg和GIF动画。
我还使用Cairo图形进行特殊渲染。开罗支持png格式 当然开罗有点难用。
答案 3 :(得分:0)
您检查过DevIL / OpenIL库吗?它遵循OpenGL风格的函数命名,并用好的'C。
编写我过去曾成功使用过。它也很便携。