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:数字进制表示
1. 数字后面跟D表示十进制,如:123D. 2. 数字后面跟B表示二进制,如:10010B. 3. 数字后面跟Q表示八进制,如:652Q. 4. 数字后面跟H表示十六进制,如:2B5H. 把十进制数 ...
- 不要试图用msvc来编译ffmpeg
出于学习目的,想建一个vs2010工程来编译ffmpeg(http://www.ffmpeg.org/),但是由于意义不大,并且工作量太大放弃了.原因如下: 1.一些unix平台相关的头文件.库的依赖 ...
- POJ 2017 No Brainer(超级水题)
一.Description Zombies love to eat brains. Yum. Input The first line contains a single integer n indi ...
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- JavaScript-Tool-富文本:UEditor
ylbtech-JavaScript-Tool-富文本:UEditor UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点.开源基于BSD协 ...
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- kvm 基础 虚拟机改名
转自:http://www.cnblogs.com/5201351/p/4464350.htm 1.查看所有的kvm虚拟机 [root@5201351_kvm ~]# virsh list --all ...
- [413D][搜索]D - Field expansion
http://codeforces.com/contest/799/problem/D 解题关键:因为3^11>100000,所以若只把2单独拿出,最多只需要暴力2^11次,故只需要dfs一下即 ...
- docker里安装ubuntu
使用 Ubuntu 官方镜像 Ubuntu 相关的镜像有很多,这里使用 -s 10 参数,只搜索那些被收藏 10 次以上的镜像 $ docker search -s 10 ubuntu NAME DE ...
- 1、linux-wget
1.常用下载与参数 wget + 空格 + 要下载文件的url路径 例如: # wget linuxsense.org/xxxx/xxx.tar.gz">http://www.linu ...