码迷,mamicode.com
首页 > 其他好文 > 详细

GDI+绘图

时间:2015-10-20 17:58:54      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

1、项目属性》连接器》输入》附加依赖项,添加“‘gdiplus.lib’”

2、头文件引入

1 #include <gdiplus.h>
2 
3 Gdiplus::GdiplusStartupInput m_GdiInput;
4 ULONG_PTR m_GDIToken;

 

3、程序入口和结束记得初始化和退出

 1 BOOL CGDIPLUSDrawApp::InitInstance()
 2 {
 3     //GDI+初始化
 4     GdiplusStartup(&m_GDIToken, &m_GdiInput, NULL);
 5 
 6         ……………………
 7 
 8     Gdiplus::GdiplusShutdown(m_GDIToken);
 9 
10     return FALSE;
11 }

4、一些基本GDI+操作

 1 void CGDIPLUSDrawDlg::OnPaint()
 2 {
 3     if (IsIconic())
 4     {
 5         CPaintDC dc(this); // 用于绘制的设备上下文
 6 
 7         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 8 
 9         // 使图标在工作区矩形中居中
10         int cxIcon = GetSystemMetrics(SM_CXICON);
11         int cyIcon = GetSystemMetrics(SM_CYICON);
12         CRect rect;
13         GetClientRect(&rect);
14         int x = (rect.Width() - cxIcon + 1) / 2;
15         int y = (rect.Height() - cyIcon + 1) / 2;
16 
17         // 绘制图标
18         dc.DrawIcon(x, y, m_hIcon);
19     }
20     else
21     {
22         CDialogEx::OnPaint();
23 
24         CClientDC dc(this);
25         Gdiplus::Graphics grx(dc.GetSafeHdc());
26         //获取窗口客户区区域
27         CRect rc;
28         GetClientRect(&rc);
29 
30         Gdiplus::Image image(_T("res\\main.png"));
31         grx.DrawImage(&image, Gdiplus::Rect(rc.left, rc.top, rc.Width(), rc.Height()));
32 
33         //矢量绘图
34         Gdiplus::Pen hPen(Gdiplus::Color(255, 255, 0, 0));
35         grx.DrawRectangle(&hPen, Gdiplus::Rect(20, 20, 50, 60));
36         grx.DrawArc(&hPen, 20, 20, 50, 60, 0, 10);
37 
38         //画刷
39         Gdiplus::HatchBrush hatch(Gdiplus::HatchStyleVertical, Gdiplus::Color(255, 0, 255, 0));
40         grx.FillRectangle(&hatch, Gdiplus::Rect(60,70,50,50));
41 
42         //位图做画刷来画文字
43         Gdiplus::Image txtimage(_T("res\\main.png"));
44         Gdiplus::TextureBrush tbrush(&txtimage);
45         Gdiplus::FontFamily family(_T("宋体"));
46         Gdiplus::Font font(&family, 30);
47         CString strImag = _T("位图画刷,画文本");
48         grx.DrawString((LPCTSTR)strImag, strImag.GetLength(), &font, Gdiplus::PointF(100, 50), &tbrush);
49 
50         //渐变画刷
51         Gdiplus::LinearGradientBrush lingrbrush(Gdiplus::Point(0, 0), Gdiplus::Point(rc.right, rc.bottom), Gdiplus::Color(255, 255, 0, 0), Gdiplus::Color(255, 0, 0, 255));
52         Gdiplus::Color clrs[] = {
53             Gdiplus::Color(255, 255, 0, 0),
54             Gdiplus::Color(255, 255, 255, 0),
55             Gdiplus::Color(255, 0, 0, 255),
56             Gdiplus::Color(255, 0, 255, 0)
57         };
58         Gdiplus::REAL pos[] = {
59             0.0f,
60             0.33f,
61             0.66f,
62             1.0f
63         };
64         lingrbrush.SetInterpolationColors(clrs, pos, 4);
65         grx.FillRectangle(&lingrbrush, Gdiplus::Rect(rc.left - 20, rc.top - 20, rc.Width() - 40, rc.Height() - 40));
66 
67         grx.ReleaseHDC(dc.GetSafeHdc());
68     }
69 }

 

GDI+绘图

标签:

原文地址:http://www.cnblogs.com/djetcgw/p/4895361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!