我在 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
方法。通过CImage
至m_staticLogo.SetBitmap()
.
但如果你真的需要它是 .png
,是可以的。
方法1(更简单的方法):加载.png
来自使用 CImage::Load
的文件.通过CImage
至m_staticLogo.SetBitmap()
.
方法2(更难的方法):加载.png
从资源加载资源到 COM IStream
并使用 CImage::Load
. (注意:CImage::LoadFromResource
看起来很诱人,但不适用于 .png
图形)。将资源放入 COM IStream
,见 this Codeproject article .请注意本文适用于 Gdiplus::Bitmap
但关键部分是如何创建 IStream
, 你应该能够适应 CImage
.最后,通过CImage
至m_staticLogo.SetBitmap()
.
编辑:更新为使用 CImage
,这比 Gdiplus::Bitmap
更容易.
关于c++ - 如何将png资源加载到对话框上的图片控件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988484/