我在OnInitDialog()上尝试了以下代码,但未显示任何内容。
m_staticLogo.SetBitmap(::LoadBitmap(NULL, MAKEINTRESOURCE(IDB_LOGO)));
其中m_staticLogo是静态图片控件,IDB_LOGO是png文件的资源ID。
最佳答案
如您所知,::LoadBitmap
(和较新的::LoadImage
)仅处理.bmp
。到目前为止,最简单的解决方案是将图像转换为.bmp
。
如果图像具有透明度,则可以将其转换为32位ARGB位图(这是一个称为AlphaConv的工具,可以对其进行转换)。然后使用CImage
类LoadFromResource
方法加载图像。将CImage
传递给m_staticLogo.SetBitmap()
。
但是,如果您真的需要将它作为.png
,则可以完成。
方法1(更简单的方法):使用.png
从文件中加载CImage::Load
。将CImage
传递给m_staticLogo.SetBitmap()
。
方法2(较难的方法):通过将资源加载到COM .png
中并使用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/