我在MFC中开发了一个小程序,可以显示形状并移动它们。
我希望能够选择可用作主MFC窗口背景的PNG图像。
目前,以下代码中的背景设置为黑色:
...
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
myCDC->FillRect(r,&brush);
...
我发现可能允许我上传位图的类 - 例如[CStatic][1]
- 但是没有找到PNG的东西。
有谁知道怎么做,或者你做过类似的事吗?
答案 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;