#include <GdiPlus.h>
#include <AtlImage.h>
#pragma comment(lib,"gdiplus.lib")
//全局对象
CImage m_Imagebmp; //bmp图片
Image * m_pImage; //png图片
//全局函数
//绘画背景
VOID DrawViewImage(CDC * pDC, CImage & BitImage, BYTE cbDrawMode);
//绘画PNG图像
bool DrawImagePng(CDC * pDC, INT nXPos, INT nYPos);
//加载 bmp文件
m_Imagebmp.Load(TEXT("res\\bmp\\VIEW_BACK.bmp"));
//加载 png文件
CT2CW strFileName(TEXT("res\\png\\READY.png"));
m_pImage=Image::FromFile((LPCWSTR)strFileName);
//错误判断
if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))
{
try { delete m_pImage; } catch (...) { ASSERT(FALSE); } m_pImage=NULL;
return false;
}
//绘画界面
void CMyWindow::OnPaint()
{
CPaintDC dc(this);
DrawViewImage(&dc,m_Imagebmp,DRAW_MODE_CENTENT);
DrawImagePng(&dc,0,100);
}
//绘画模式
#define DRAW_MODE_SPREAD 0 //平铺模式
#define DRAW_MODE_CENTENT 1 //居中模式
#define DRAW_MODE_ELONGGATE 2 //拉伸模式
//绘画模式
#define DRAW_MODE_SPREAD 0 //平铺模式
#define DRAW_MODE_CENTENT 1 //居中模式
#define DRAW_MODE_ELONGGATE 2 //拉伸模式
//绘画背景
VOID CMyWindow::DrawViewImage( CDC * pDC, CImage & BitImage, BYTE cbDrawMode )
{
//获取位置
CRect rcClient;
GetClientRect(&rcClient);
//无效区域
CRect rcDirty;
pDC->GetClipBox(&rcDirty);
//绘画位图
switch (cbDrawMode)
{
case DRAW_MODE_SPREAD: //平铺模式
{
//加载资源
INT nImageWidth=BitImage.GetWidth();
INT nImageHeight=BitImage.GetHeight();
//绘画位图
for (INT nXPos=0;nXPos<rcClient.right;nXPos+=nImageWidth)
{
for (INT nYPos=0;nYPos<rcClient.bottom;nYPos+=nImageHeight)
{
BitImage.BitBlt(pDC->m_hDC,nXPos,nYPos);
}
}
return;
}
case DRAW_MODE_CENTENT: //居中模式
{
//变量定义
INT nImageWidth=BitImage.GetWidth();
INT nImageHeight=BitImage.GetHeight();
//位置计算
INT nXPos=(rcClient.Width()-BitImage.GetWidth())/2;
INT nYPos=(rcClient.Height()-BitImage.GetHeight())/2;
//绘画位图
BitImage.BitBlt(pDC->m_hDC,nXPos,nYPos);
return;
}
case DRAW_MODE_ELONGGATE: //拉伸模式
{
//变量定义
INT nImageWidth=BitImage.GetWidth();
INT nImageHeight=BitImage.GetHeight();
//绘画位图
BitImage.StretchBlt(pDC->m_hDC,0,0,rcClient.Width(),rcClient.Height(),0,0,nImageWidth,nImageHeight);
return;
}
}
return;
}
//绘画图像
bool CMyWindow::DrawImagePng( CDC * pDC, INT nXPos, INT nYPos )
{
//加载判断
ASSERT(m_pImage!=NULL);
if (m_pImage==NULL) return false;
//创建屏幕
ASSERT(pDC!=NULL);
Graphics graphics(pDC->GetSafeHdc());
//获取属性
INT nImageWidth=m_pImage->GetWidth();
INT nImageHeight=m_pImage->GetHeight();
//构造位置
RectF rcDrawRect;
rcDrawRect.X=(REAL)nXPos;
rcDrawRect.Y=(REAL)nYPos;
rcDrawRect.Width=(REAL)nImageWidth;
rcDrawRect.Height=(REAL)nImageHeight;
//绘画图像
graphics.DrawImage(m_pImage,rcDrawRect,0,0,(REAL)nImageWidth,(REAL)nImageHeight,UnitPixel);
return true;
}
//GDI+初始化
GdiplusStartupInput m_GdiplusStartupInput;
ULONG_PTR m_GdiplusToken;
ULONG_PTR token=GdiplusStartup(&m_GdiplusToken, &m_GdiplusStartupInput, NULL);
//清除使用
GdiplusShutdown(token);