在MFC窗口中使用PNG作为背景图像

时间:2013-12-24 13:29:53

标签: c++ image background mfc

我在MFC中开发了一个小程序,可以显示形状并移动它们。

我希望能够选择可用作主MFC窗口背景的PNG图像。

目前,以下代码中的背景设置为黑色:

...
    CBrush brush;
    brush.CreateSolidBrush(RGB(0,0,0));
    myCDC->FillRect(r,&brush);
...

我发现可能允许我上传位图的类 - 例如[CStatic][1] - 但是没有找到PNG的东西。

有谁知道怎么做,或者你做过类似的事吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Gdiplus类Image http://msdn.microsoft.com/en-us/library/windows/desktop/ms534462(v=vs.85).aspx

因为png文件可以有alpha属性,但是位图没有, 所以我总是使用Image来加载png文件。

wchar_t szFile[256] = {0};   //  png image file path
Image*  m_pImage;
m_pImage = new Image(szFile, FALSE);   // Load png file


// drawing png image 
CPaintDC dc(this); // 用于绘制的设备上下文
Graphics graphics(dc.m_hDC);
if(m_pImage != NULL && (m_pImage->GetLastStatus() == Gdiplus::Status::Ok))
{
    graphics.DrawImage(m_pImage, 0, 0, m_pImage->GetWidth(), m_pImage->GetHeight());
}

// need delete it, if you donot need it
if (m_pImage != NULL)
{
    delete m_pImage;
    m_pImage = NULL;
}

答案 1 :(得分:0)

我认为GDI +是显示图像的最佳和最简单的方法。它支持jpg,gif,tiff以及png。 您只需按以下代码显示图像,

void OnPaint(HDC hdc)
{
   Graphics G(hdc);
   Image I(L"snowman.jpg");

   if (I.GetLastStatus() != Ok) {
     MessageBox(hWndMain,TEXT("cannot read the image file"), TEXT("error"),MB_OK);
     return;
   }
   G.DrawImage(&I,0,0);
}

此外,您可以使用FromFile静态方法在执行期间更改图像。

Image *pI;
pI=Image::FromFile(L"snowman.jpg");

G.DrawImage(pI,0,0);

delete pI;