Gdiplus的使用 gdi+
使用步骤:
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+的更多相关文章
- GDI+ 笔记
1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <ma ...
- VC GDI+基础用法VC
#include "GdiPlus.h" // 使用GDI+ 命名空间 using namespace Gdiplus; // 与GDI+ 相关的其它头文件,如:GraphicsP ...
- GDI+ 或 GdiPlus 在VC6下的使用方法
1.在你的app类头文件中假如以下代码(红字显示) #if !defined(AFX_WALKLTDEMO_H__826A807C_C01D_4FF0_9248_A6BD0369F3A8__INCLU ...
- GdiPlus 一个给 Delphi 提供的新的 GDI+ 接口很好用!
尽管 GDI+ 已经有近 10 年的历史(随 Win2000 推出), 尽管 DirectX 如日中天, 但在 Windows 7 之前的版本下进行 2D 绘图还是离不开它, 微软也没有停止对它的升级 ...
- GDI+图形图像处理技术——GDIPlus绘图基础
GDI+概述 GDI在windows中定义为Graphis Device interface,及图形设备接口,是Windows API(application Programming Interfac ...
- Asp.Net Core中使用GDI+绘图提示gdiplus库找不到的问题
参考 https://www.cnblogs.com/VirtualMJ/p/9917916.html 文章中 1 2 3 yum install -y epel-release yum mak ...
- 【VC++技术杂谈007】使用GDI+进行图片格式转换
本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使 ...
- win32自绘按钮,使用GDI+(三)
解决前面的问题.实现鼠标移动进入到按钮的特效. 效果是这样的 鼠标移到按钮上,改变按钮的颜色(这里用的是直接换贴在按钮上的图片) 程序运行 鼠标进入按钮 代码 #ifndef ULONG_PTR // ...
- win32自绘按钮,使用GDI+(一)
第一次写随笔,我本来想将win32窗口的标题栏设置成渐变色,像这样的效果 但发现找不到设置标题栏属性的api,SetWindowLong也只是增减窗口的固定的样式而已.所以想到一个思路,把标题栏去掉, ...
随机推荐
- C语言逗号运算符和逗号表达式
在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...
- ACM学习历程—ZOJ3785 What day is that day?(数论)
Description It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are ...
- Java中Calendar常用方法总结
//获取当前时刻yyyy-MM-dd HH:mm:ss Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new S ...
- 搭建DNS服务器-bind
1. 安装 yum install -y bind-chroot yum install -y bind-utils service named-chroot start 2. 修改配置 增加一 ...
- 洛谷【P1142】轰炸
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.luogu.org/problemnew/show/P ...
- 多puppetmaster,多ca,keepalived+haproxy(nginx)puppet集群搭建
多puppetmaster,多ca,keepalived+haproxy(nginx)puppet集群搭建 一.服务器详情 192.168.122.111 pm01.jq.com pm01 #(pup ...
- 杂项-权限管理:Spring Secutity
ylbtech-杂项-权限管理:Spring Secutity Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在S ...
- JS---星星评分
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 怎么查看mysql的安装目录,环境:windows+mysql+navicat
怎么查看mysql的安装目录 如果忘记了MySQL的安装目录,怎么快速找到呢?方法或许很多,作者觉得这种最方便了 环境:windows+mysql+navicat 方法:进入mysql命令行输入:sh ...
- 【转】GitHub使用
1.设置Git全局用户配置 git config --global user.name "xxx" git config --global user.email xxx@gmail ...