总结GDI+使用方法
来源:互联网 发布:阿里云ecs增加数据盘 编辑:程序博客网 时间:2024/06/05 00:11
说明:开发中难免会用到GDI和GDI+,用的时候都是到处找代码看资料,即使以前做过隔断时间又忘记了,干脆总结下以后也方便。
一、GDI+在程序中的引用
1、stdafx.h
// 引用GDI+
#include <GdiPlus.h>
using namespace Gdiplus;
//该函数用来加载资源中的各种格式的图片(我写到这里也可以放到自己的类中)
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & pImg);
1.1.staafx.cpp
/************************************************************************\
* 函数说明:加载指定格式的图片
* 参数说明 nID:资源ID, sTr:图片格式 pImg:Imag变量
* 返 回 值:成功(TRUE)与失败(TRUE)
* 注意事项:无
* 编辑日期:2014-08-29
* 作 者:XQ
\************************************************************************/
BOOL ImageFromIDResource( UINT nID, LPCTSTR sTR, Image * & pImg )
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
if (!hRsrc)
{
AfxMessageBox(_T("加载资源ID错误"));
return FALSE;
}
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
{
AfxMessageBox(_T("加载资源错误"));
return FALSE;
}
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}
2.初始化GDI+内部变量
//一般放到程序APP头文件中(我这里封装的DLL,放到了我的窗口作为类成员变量)
ULONG_PTR m_gdiplusToken;
//这两个一般也是放到程序APP的InitInstance()里面
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
//这个一般就放在程序APP的ExitInstance()函数里面
Gdiplus::GdiplusShutdown(m_gdiplusToken);
二、使用
1、加载资源
// 首先我在类中声明一个Image指针变量
Image *m_LogoImg;
// 构造函数中初始化变量
m_LogoImg = NULL;
//OnInitDialog()中加载图片
BOOL bRe = ImageFromIDResource(IDB_PNG_LOGO, _T("PNG"), m_LogoImg);
if (!bRe)
{
AfxMessageBox(_T("加载图像失败!"));
}
2.显示图片
2.1在OnPaint()中显示(这个看情况)
// GDI+ logo
HDC hdc = GetDC()->m_hDC;
Graphics graphics(hdc);
graphics.DrawImage(m_LogoImg, 0, 5, 110, 30);
3.释放Image变量
if(m_LogoImg != NULL)
{
delete m_LogoImg;
m_LogoImg = NULL;
}
//给段GDI双缓冲的
CRect rect;
GetClientRect(&rect);
// Title
CDC dcMemTitle ;
dcMemTitle.CreateCompatibleDC(&dc);
CBitmap bmpBackgroundTitle;
bmpBackgroundTitle.LoadBitmap(IDB_TITLE);
BITMAP bitmapTitle;
bmpBackgroundTitle.GetBitmap(&bitmapTitle);
CBitmap *pbmpOldTitle=dcMemTitle.SelectObject(&bmpBackgroundTitle);
dc.StretchBlt(0, 0, rect.Width(), 40, &dcMemTitle, 0, 0, bitmapTitle.bmWidth, bitmapTitle.bmHeight, SRCCOPY);
- 总结GDI+使用方法
- GDI总结
- GDI总结
- GDI使用方法小结(一)
- GDI使用方法小结(二)
- GDI+环境配置与使用方法
- vs2008中GDI+的使用方法
- GDI初学者的总结
- GDI+ 小知识点总结
- GDI映射模式总结
- GDI+入门(总结)
- GDI编程基础总结
- GDI+入门(总结)
- Win32 GDI 学习总结
- c++ GDI 中SelectObject使用方法和注意事项
- GDI绘图基本步骤总结
- GDI 总结一 CBitmap类
- GDI+ 总结一: 保存图像文件
- ANTLR4权威指南 - 第6章 尝试一些实际中的语法
- jQuery中prop()方法和attr()方法的区别
- 华为双活容灾方案:如何提高卫生信息平台数据存储及容灾能力
- java--------学习之《面对像一》
- 华为机试---正数的减法计算控制
- 总结GDI+使用方法
- Android 重读官方文档 5 Activity
- 图论算法(1)--- 如何求每一个节点在DAG中的最大深度
- TOMCAT下的最常见的错误
- android adb shell 常用命令记录
- MVC action 返回javascriptResult 需要引入的文件是
- win7下共享文件夹
- 正则表达式,日后必定有用
- 各种hash