c++ - 如何将png资源加载到对话框上的图片控件中?

标签 c++ visual-studio mfc png

我在 OnInitDialog() 上尝试了以下代码,但没有显示任何内容。

m_staticLogo.SetBitmap(::LoadBitmap(NULL, MAKEINTRESOURCE(IDB_LOGO)));

其中m_staticLogo是静态图片控件,IDB_LOGO是png文件的资源ID。

最佳答案

如您所见,::LoadBitmap (以及较新的 ::LoadImage )仅处理 .bmp s。到目前为止,最简单的解决方案是将您的图像转换为 .bmp .

如果图像具有透明度,则可以将其转换为 32 位 ARGB 位图(这里有一个名为 AlphaConv 的工具可以进行转换)。然后使用 CImage 加载图像类(class) LoadFromResource方法。通过CImagem_staticLogo.SetBitmap() .

但如果你真的需要它是 .png ,是可以的。

方法1(更简单的方法):加载.png来自使用 CImage::Load 的文件.通过CImagem_staticLogo.SetBitmap() .

方法2(更难的方法):加载.png从资源加载资源到 COM IStream并使用 CImage::Load . (注意:CImage::LoadFromResource 看起来很诱人,但不适用于 .png 图形)。将资源放入 COM IStream ,见 this Codeproject article .请注意本文适用于 Gdiplus::Bitmap但关键部分是如何创建 IStream , 你应该能够适应 CImage .最后,通过CImagem_staticLogo.SetBitmap() .

编辑:更新为使用 CImage ,这比 Gdiplus::Bitmap 更容易.

关于c++ - 如何将png资源加载到对话框上的图片控件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988484/

相关文章:

c++ - 使用位移运算将两个变量相乘

visual-studio - 如何在目标之间创建人为的循环依赖

visual-studio - 如何使用 Visual Studio 2010 从源代码构建 MFC 库

c++ - 如何在 GDI 中播放元文件

c++ - I/O C++ 从文本文件读取

c++ - 尽管没有外部库,但 Unresolved external 问题

C++ Qt 如何让标签显示您使用表单创建的电影 (gif)?

c++ - Visual Studio 中的正则表达式

c# - Windows 窗体启动另一个窗体

visual-c++ - 为什么我不能在为 Windows CE 制作的 MFC DLL 中使用 CString 作为返回类型或参数?