首页 > 代码库 > MFC和GDI+一起使用

MFC和GDI+一起使用

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

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

定义类的变量 ULONG_PTR   gdiplusToken;

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

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

在ExitInstance()中添加

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

添加绘制的代码:

 1 void CGDALDesktopView::OnDraw(CDC* pDC) 2 { 3     CGDALDesktopDoc* pDoc = GetDocument(); 4     ASSERT_VALID(pDoc); 5     if (!pDoc) 6         return; 7      8     //Graphics graphics(*pDC); 9         Graphics g( pDC->GetSafeHdc() );10     //建立画笔11      Pen pen_black(Color::Black);12      Pen pen_white(Color::White);13     //使用画笔绘制图形14     pen_black.SetWidth(6); //设置画笔宽度15     pen_black.SetStartCap(LineCapRoundAnchor); //设置开始笔帽16     pen_black.SetEndCap(LineCapArrowAnchor); //设置结束笔帽 17     g.DrawLine(&pen_black, 10, 10, 100, 10);18     Rect rect1(0,0, 150, 80);19     Rect rect2(10 + 170, 200, 150, 80);20     Rect rect3(10 + 170*2, 200, 150, 80);21     Rect rect4(10 + 170*3, 200, 150, 80);22     g.DrawRectangle(&pen_black, rect1);23      g.DrawRectangle(&pen_black, rect2);24      g.DrawRectangle(&pen_black, rect3);25      g.DrawRectangle(&pen_black, rect4);26     //建立画刷27      //实色画刷28     SolidBrush brush_black(Color::Black);29      SolidBrush brush_white(Color::White);30      SolidBrush brush_blue(Color::Blue);31      g.FillRectangle(&brush_blue, rect1);32      //网格画刷33      HatchBrush brush_hatch( HatchStyleDiagonalBrick, Color(255, 255, 0, 0), Color(30, 0, 255, 0)); 34     g.FillRectangle(&brush_hatch, rect2);35      //贴图画刷36      Image image(L"res\\qq.gif"); 37      TextureBrush brush_texture(&image); 38      g.FillRectangle(&brush_texture, rect3);39      //渐变画刷(线形渐变)40      LinearGradientBrush brush_gradient_line( Point(0, 0), Point(10, 10),Color(255, 255, 0, 0), Color(255, 0, 0, 255));41      g.FillRectangle(&brush_gradient_line, rect4);42      //渐变画刷(路径渐变)43      //PathGradientBrush......................44     //贴图画笔45      Pen pen_texture(&brush_texture, 30);46     g.DrawEllipse(&pen_texture, 600, 10, 150 ,150);47     //启动抗锯齿功能48      pen_black.SetWidth(1);49      g.SetSmoothingMode(SmoothingModeAntiAlias);50      g.DrawLine(&pen_black, 150, 5, 350 , 20); 51     //绘制图像52     // 不进行缩放53      g.DrawImage(&image, 10,50);54      // 使用低质量的插补算法55      g.SetInterpolationMode(InterpolationModeNearestNeighbor);56      g.DrawImage( &image, Rect(100,50, 100, 100));57      // 使用中等质量的插补算法58      g.SetInterpolationMode(InterpolationModeHighQualityBilinear);59      g.DrawImage( &image, Rect(250,50, 100, 100));60      // 使用高质量的插补算法61      g.SetInterpolationMode(InterpolationModeHighQualityBicubic);62      g.DrawImage( &image, Rect(400,50, 100, 100)); 63     //路径64     GraphicsPath path1;65     path1.AddLine(300, 350, 500 ,350);66     path1.AddArc(300, 300, 200, 100, 0, -180);67     g.DrawPath(&pen_black, &path1);68     g.FillPath(&brush_black, &path1);69     //区域70     GraphicsPath pathOuter;71     pathOuter.AddRectangle(Rect(100, 320, 150 ,150));72     GraphicsPath pathInner;73      pathInner.AddEllipse(Rect(150, 360, 90 ,80));74      Region rgn(&pathOuter);75      rgn.Exclude(&pathInner);76     g.FillRegion(&brush_blue, &rgn);77     // TODO: 在此处为本机数据添加绘制代码78 }
View Code