使用步骤:

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. 09 - Django应用第六步

    1 自定义页面 在项目中, 肯定不会只是显示单纯的HTML文件, 我们可能还需要JS, CSS, 图片等 这些文件就被称为静态文件(starIc files) 在小的项目中, 可能静态文件比较少, 但 ...

  2. Java 时间和日期类型的 Hibernate 映射

    以下情况下必须显式指定 Hibernate 映射类型 一个 Java 类型可能对应多个 Hibernate 映射类型. 例如: 如果持久化类的属性为 java.util.Date 类型, 对应的 Hi ...

  3. bzoj 1398: 寻找主人 AC自动机+最小表示法

    题目大意: 给定两个序列判断是否循环同构,若循环同构则输出最小表示 题解: 因为没有样例输入输出,一开始没看到要求输出最小表示 Wa一大页. 但不得不说bzoj还是挺高效的: 赞一个 XD.jpg 判 ...

  4. bzoj 3012: [Usaco2012 Dec]First! Trie+拓扑排序

    题目大意: 给定n个总长不超过m的互不相同的字符串,现在你可以任意指定字符之间的大小关系.问有多少个串可能成为字典序最小的串,并输出这些串.n <= 30,000 , m <= 300,0 ...

  5. DEBUG命令说明

    Debug在学习汇编的过程中,担任着一个非常重要的角色,是一个极其重要的调试工具,所以学会它是必须得. 命令格式 功能说明 A [地址] 输入汇编指令 C [范围] 起始地址 对由“范围”指定的区域与 ...

  6. BZOJ2548:[CTSC2002]灭鼠行动

    我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  7. understanding of Pipe line & Timing Logic

    ///////////////////////////////////////////////////////////////////////////////// module vlg_add(inp ...

  8. android使用wcf接收上传图片视频文件

    一.Android 权限配置文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmln ...

  9. MODBUS TCP和MODBUS RTU的差别

    TCP和RTU协议非常类似, MBAP Header长度共7个字节,分别为Transaction identifier(事务标识符),Protocol identifier(协议标识符),Length ...

  10. Windows 2008 远程登陆时提示"要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限"

    ECS Win2008 远程时提示"要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限"的解决方法   问题描述 ECS Windows 2008 远程登陆时提示&quo ...