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

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

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

最佳答案

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

如果图像具有透明度,则可以将其转换为32位ARGB位图(这是一个称为AlphaConv的工具,可以对其进行转换)。然后使用CImageLoadFromResource方法加载图像。将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/

10-11 22:13