Gdiplus的使用

使用步骤:

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 }

运行效果:

时间: 2024-07-30 03:17:23

Gdiplus的使用的相关文章

GDIPlus非典型误用一例

// ** 初始化GDI+ Gdiplus::GdiplusStartupInput gdiplusStartupInput; // ** 该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识. ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); Image image( imagePath ); //加载图片 Graphics imageGraph

[ATL/WTL]_[中级]_[使用GDIPlus剪切和缩放图片]

场景: 1. 缩放图片,不用多说,就是需要缩略图和画在界面上这类. 2. 剪切,不用多说,就是剪切一部分图片用于绘制控件背景之类. 3. wxWidget的wxImage都是自带这些功能的直接方法的. Gdiplus::Bitmap* CutImage(Gdiplus::Image* source,int x,int y,int width,int height) { Gdiplus::Rect zoomRect(0, 0, width,height); Gdiplus::Bitmap* pIm

Win32 CreateWindow GdiPlus

#include "stdafx.h" #include "TestGidPlus.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { GdiplusStartupInput gdiplusStartu

【gdiplus.h问题】

之前用GUI+的时候一直都是用的 #include <gdiplus.h> #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus; 但是偶发现当多个文件包含的时候,会报很多错误~~ 1>f:\vs2013\vc\include\gdiplusenums.h(29): error C2146: 语法错误: 缺少";"(在标识符"GraphicsState"的前面)

可能 delphi7 下稳定的最后一版本 GDIPLUS

万一的 blog 说"终于, Delphi XE2 携带 GDI+ 库了 使用了较早的 http://www.progdigy.com"但这个网址已经下不了了,而 http://www.bilsen.com/gdiplus 的又要 delphi2009 以后版本,另外 IGDIPlus 又有比较严重的 bug,得了放一个当前用的上来吧,不知道有没有 bug grp.DrawPath(pen,path); //这里有个 gdi+ 库引入的 bug, 如果是 IGDIPlus 则在这里会形

gdiplus 初始化

// static ULONG_PTR gdiplus_token; ULONG_PTR GdiPlusGraphics::gdiplus_token = 0; void GdiPlusGraphics::Init() { if(!gdiplus_token) { Gdiplus::GdiplusStartupInput StartupInput; GdiplusStartup(&gdiplus_token,&StartupInput,NULL); } } void GdiPlusGrap

GDIplus的初次接触--加载并显示常用格式图片

在没有接触Gdiplus之前,在vc中绘制图片,通常加载一张位图,然后进行贴图.对于现在多种多样的图片格式,之前的GDI并不支持(应该是这样的,呵呵).而使用Gdiplus则可以选择多种图片格式,比如BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF, and EMF. 下面就介绍下首次接触Gdiplus的一个简单应用. 一.包括相应的头文件及引入相应的lib <span style="white-space:pre"> </span

GdiPlus使用方法

GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出. 在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕.打印机及其它输出设备上输出图形,文本等操作.GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作. GDI

GDIPlus绘制桌面歌词

功能介绍 採用GDIPlus绘制桌面歌词,相似酷狗.QQ音乐等软件.歌词支持纯色.两色渐变.三色渐变:支持高亮歌词. 实现方法 窗体部分:桌面歌词是个独立的背景透明窗体.能够移动位置,能够鼠标穿透.透明採用WS_EX_LAYERED.UpdateLayeredWindow.鼠标穿透能够增加WS_EX_TRANSPARENT样式.歌词部分:用Graphics::MeasureString取出文字的宽度/高度.把文字增加GDIPlus的路径(GraphicsPath),然后绘制边框(Graphics

Gdiplus

#include <Gdiplus.h>using namespace Gdiplus; //声明Gdiplus::GdiplusStartupInput m_gdiplusStartupInput; ULONG_PTR m_gdiplusToken; Image * m_pImage; //构造GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL); m_pImage= NULL; CString sPath