使用步骤:

1.包括相应的头文件及引入相应的lib

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

2.初始化Gdiplus

1 Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
2 ULONG_PTR m_gdiplusToken;
3
4 GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );

3.加载相应的资源(此处为图片)

 1 Image* m_pImage;  //图片对象
2 m_pImage=Image::FromFile(_T("Test03.jpg"));
3
4 //错误判断
5 if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))
6 {
7 if ( m_pImage )
8 {
9 delete m_pImage;
10 m_pImage = NULL;
11 }
12 return FALSE;
13 }

4.绘制图片

1 Graphics graphics( GetDC()->GetSafeHdc() );
2 graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());

5.关闭Gdiplus

1 GdiplusShutdown( m_gdiplusToken ); 

完整示例:

  1 // GdiplusTestDlg.cpp : 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "GdiplusTest.h"
6 #include "GdiplusTestDlg.h"
7 #include "afxdialogex.h"
8 #include <GdiPlus.h>
9
10 #ifdef _DEBUG
11 #define new DEBUG_NEW
12 #endif
13
14 #pragma comment(lib, "gdiplus.lib")
15
16 using namespace Gdiplus;
17
18
19 //变量声明
20 Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
21 ULONG_PTR m_gdiplusToken;
22 Image* m_pImage; //图片对象
23
24 // CGdiplusTestDlg 对话框
25
26
27 CGdiplusTestDlg::CGdiplusTestDlg(CWnd* pParent /*=NULL*/)
28 : CDialogEx(CGdiplusTestDlg::IDD, pParent)
29 {
30 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
31 }
32
33 void CGdiplusTestDlg::DoDataExchange(CDataExchange* pDX)
34 {
35 CDialogEx::DoDataExchange(pDX);
36 }
37
38 BEGIN_MESSAGE_MAP(CGdiplusTestDlg, CDialogEx)
39 ON_WM_PAINT()
40 ON_WM_QUERYDRAGICON()
41 ON_WM_DESTROY()
42 END_MESSAGE_MAP()
43
44
45 // CGdiplusTestDlg 消息处理程序
46
47 BOOL CGdiplusTestDlg::OnInitDialog()
48 {
49 CDialogEx::OnInitDialog();
50
51 // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
52 // 执行此操作
53 SetIcon(m_hIcon, TRUE); // 设置大图标
54 SetIcon(m_hIcon, FALSE); // 设置小图标
55
56 // TODO: 在此添加额外的初始化代码
57 //初始化GDI+
58 GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );
59
60 //加载文件
61 m_pImage=Image::FromFile(_T("E:\\Workspace\\Resource\\Chrysanthemum.jpg"));
62
63 //错误判断
64 if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))
65 {
66 if ( m_pImage )
67 {
68 delete m_pImage;
69 m_pImage = NULL;
70 }
71 return FALSE;
72 }
73
74 MoveWindow( 0, 0, 1024, 768 );
75
76 //设置按钮位置
77 CWnd* pBtn = GetDlgItem( IDOK );
78 if ( pBtn )
79 {
80 pBtn->MoveWindow( 1024-160, 700, 60, 30 );
81 }
82 pBtn = GetDlgItem( IDCANCEL );
83 if( pBtn )
84 {
85 pBtn->MoveWindow( 1024-80, 700, 60, 30 );
86 }
87 CenterWindow();
88
89 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
90 }
91
92 // 如果向对话框添加最小化按钮,则需要下面的代码
93 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
94 // 这将由框架自动完成。
95
96 void CGdiplusTestDlg::OnPaint()
97 {
98 if (IsIconic())
99 {
100 CPaintDC dc(this); // 用于绘制的设备上下文
101
102 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
103
104 // 使图标在工作区矩形中居中
105 int cxIcon = GetSystemMetrics(SM_CXICON);
106 int cyIcon = GetSystemMetrics(SM_CYICON);
107 CRect rect;
108 GetClientRect(&rect);
109 int x = (rect.Width() - cxIcon + 1) / 2;
110 int y = (rect.Height() - cyIcon + 1) / 2;
111
112 // 绘制图标
113 dc.DrawIcon(x, y, m_hIcon);
114 }
115 else
116 {
117 CDialogEx::OnPaint();
118 }
119
120 Graphics graphics( GetDC()->GetSafeHdc() );
121 graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());
122 }
123
124 //当用户拖动最小化窗口时系统调用此函数取得光标
125 //显示。
126 HCURSOR CGdiplusTestDlg::OnQueryDragIcon()
127 {
128 return static_cast<HCURSOR>(m_hIcon);
129 }
130
131
132
133 void CGdiplusTestDlg::OnDestroy()
134 {
135 CDialogEx::OnDestroy();
136
137 // TODO: 在此处添加消息处理程序代码
138 if( m_pImage )
139 {
140 try
141 {
142 delete m_pImage;
143 }
144 catch (...)
145 {
146
147 }
148 m_pImage = NULL;
149 }
150
151 GdiplusShutdown( m_gdiplusToken );
152 }

运行效果:

Gdiplus的使用 gdi+的更多相关文章

  1. GDI+ 笔记

    1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <ma ...

  2. VC GDI+基础用法VC

    #include "GdiPlus.h" // 使用GDI+ 命名空间 using namespace Gdiplus; // 与GDI+ 相关的其它头文件,如:GraphicsP ...

  3. GDI+ 或 GdiPlus 在VC6下的使用方法

    1.在你的app类头文件中假如以下代码(红字显示) #if !defined(AFX_WALKLTDEMO_H__826A807C_C01D_4FF0_9248_A6BD0369F3A8__INCLU ...

  4. GdiPlus 一个给 Delphi 提供的新的 GDI+ 接口很好用!

    尽管 GDI+ 已经有近 10 年的历史(随 Win2000 推出), 尽管 DirectX 如日中天, 但在 Windows 7 之前的版本下进行 2D 绘图还是离不开它, 微软也没有停止对它的升级 ...

  5. GDI+图形图像处理技术——GDIPlus绘图基础

    GDI+概述 GDI在windows中定义为Graphis Device interface,及图形设备接口,是Windows API(application Programming Interfac ...

  6. Asp.Net Core中使用GDI+绘图提示gdiplus库找不到的问题

    参考  https://www.cnblogs.com/VirtualMJ/p/9917916.html 文章中   1 2 3 yum install -y epel-release yum mak ...

  7. 【VC++技术杂谈007】使用GDI+进行图片格式转换

    本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使 ...

  8. win32自绘按钮,使用GDI+(三)

    解决前面的问题.实现鼠标移动进入到按钮的特效. 效果是这样的 鼠标移到按钮上,改变按钮的颜色(这里用的是直接换贴在按钮上的图片) 程序运行 鼠标进入按钮 代码 #ifndef ULONG_PTR // ...

  9. win32自绘按钮,使用GDI+(一)

    第一次写随笔,我本来想将win32窗口的标题栏设置成渐变色,像这样的效果 但发现找不到设置标题栏属性的api,SetWindowLong也只是增减窗口的固定的样式而已.所以想到一个思路,把标题栏去掉, ...

随机推荐

  1. NOIp2018集训test-10-18 (bike day4)

    这是一套简单题,这几天的考试让bike老爷感觉很绝望,说实话我也确实不知道还能怎么更简单了. 这几天的题换做llj.sxy应该都能轻松AK吧,至少随便考个250+应该不是问题吧,我越来越觉得觉得我跟他 ...

  2. bzoj 3924 幻想乡战略游戏 —— 动态点分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3924 参考了博客:https://blog.csdn.net/qq_34564984/art ...

  3. java对象在内存中的结构(HotSpot虚拟机)

    一.对象的内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 从上面的这张图里面可以 ...

  4. mysqladmin命令用法

    mysqladmin 工具的使用格式: mysqladmin [option] command [command option] command ...... option 选项: -c  numbe ...

  5. Mybatis连接mysql数据库出现乱码

    对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的 ...

  6. 使用tftp给ARM下载程序

    使用tftp给ARM下载程序 1.开发板和主机能够ping的通 前提:要把计算机的防火墙关了,不然就会出现下面这种情况 如果电脑连接的无线网,那么设置本地连接的ip设置为固定ip.Ip地址和开发的ip ...

  7. MyBatis总结(1)

    MyBatis前身是ibatis,是一个数据持久层框架.封装优化了普通JDBC过程, 如数据库连接的创建.设置SQL语句参数.执行SQL语句.事务.结果映射以及资源释放等. MyBatis是一个支持普 ...

  8. HTTP返回码中301与302的区别

    一.官方说法 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved). 302 ...

  9. JDBC编程之程序优化

    -----------------siwuxie095 首先下载 MySQL 的 JDBC 驱动,下载链接: https://dev.mysql.com/downloads/connector/j/ ...

  10. 第六篇 elasticsearch express 删除索引数据

    express 框架删除elasticsearch索引数据 1.在elasticsearch.js文件下添加 function deleteDocument(id) { return elasticC ...