MFC和GDI+一起使用

时间:2022-05-20 11:03:17

VS2010,新建MFC项目,在头文件stdafx.h中添加:

 #include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")

定义类的变量 ULONG_PTR   gdiplusToken;

在BOOL CGDALDesktopApp::InitInstance()中添加:

 GdiplusStartupInput gdiplusStartupInput;
2 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

在ExitInstance()中添加:

 int CGDALDesktopApp::ExitInstance()
{
//TODO: 处理可能已添加的附加资源
AfxOleTerm(FALSE);
GdiplusShutdown(gdiplusToken);
return CWinAppEx::ExitInstance();
}

添加绘制的代码:

 void CGDALDesktopView::OnDraw(CDC* pDC)
{
CGDALDesktopDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; //Graphics graphics(*pDC);
Graphics g( pDC->GetSafeHdc() );
//建立画笔
Pen pen_black(Color::Black);
Pen pen_white(Color::White);
//使用画笔绘制图形
pen_black.SetWidth(); //设置画笔宽度
pen_black.SetStartCap(LineCapRoundAnchor); //设置开始笔帽
pen_black.SetEndCap(LineCapArrowAnchor); //设置结束笔帽
g.DrawLine(&pen_black, , , , );
Rect rect1(,, , );
Rect rect2( + , , , );
Rect rect3( + *, , , );
Rect rect4( + *, , , );
g.DrawRectangle(&pen_black, rect1);
g.DrawRectangle(&pen_black, rect2);
g.DrawRectangle(&pen_black, rect3);
g.DrawRectangle(&pen_black, rect4);
//建立画刷
//实色画刷
SolidBrush brush_black(Color::Black);
SolidBrush brush_white(Color::White);
SolidBrush brush_blue(Color::Blue);
g.FillRectangle(&brush_blue, rect1);
//网格画刷
HatchBrush brush_hatch( HatchStyleDiagonalBrick, Color(, , , ), Color(, , , ));
g.FillRectangle(&brush_hatch, rect2);
//贴图画刷
Image image(L"res\\qq.gif");
TextureBrush brush_texture(&image);
g.FillRectangle(&brush_texture, rect3);
//渐变画刷(线形渐变)
LinearGradientBrush brush_gradient_line( Point(, ), Point(, ),Color(, , , ), Color(, , , ));
g.FillRectangle(&brush_gradient_line, rect4);
//渐变画刷(路径渐变)
//PathGradientBrush......................
//贴图画笔
Pen pen_texture(&brush_texture, );
g.DrawEllipse(&pen_texture, , , ,);
//启动抗锯齿功能
pen_black.SetWidth();
g.SetSmoothingMode(SmoothingModeAntiAlias);
g.DrawLine(&pen_black, , , , );
//绘制图像
// 不进行缩放
g.DrawImage(&image, ,);
// 使用低质量的插补算法
g.SetInterpolationMode(InterpolationModeNearestNeighbor);
g.DrawImage( &image, Rect(,, , ));
// 使用中等质量的插补算法
g.SetInterpolationMode(InterpolationModeHighQualityBilinear);
g.DrawImage( &image, Rect(,, , ));
// 使用高质量的插补算法
g.SetInterpolationMode(InterpolationModeHighQualityBicubic);
g.DrawImage( &image, Rect(,, , ));
//路径
GraphicsPath path1;
path1.AddLine(, , ,);
path1.AddArc(, , , , , -);
g.DrawPath(&pen_black, &path1);
g.FillPath(&brush_black, &path1);
//区域
GraphicsPath pathOuter;
pathOuter.AddRectangle(Rect(, , ,));
GraphicsPath pathInner;
pathInner.AddEllipse(Rect(, , ,));
Region rgn(&pathOuter);
rgn.Exclude(&pathInner);
g.FillRegion(&brush_blue, &rgn);
// TODO: 在此处为本机数据添加绘制代码
}