当前位置:C++技术网 > 资讯 > 利用GDI+输出文本

利用GDI+输出文本

更新时间:2015-10-07 19:38:23浏览次数:1+次

很多的技术文章,作者对于很多的细节都是一笔带过,断章取义,最起码笔者我很多时候就学的特别迷糊。因此,我从学习者的角度出发,浅析透彻脉络,尽量让你了解清楚你想了解的

一个简单的GDI+程序分四个步骤来进行:
1,在项目中引入GDI+头文件,使用GDI+的命名空间
2,初始化GDI+系统资源
3,使用完毕后,释放GDI+所使用的资源
4,在编译时假如GDIplus.Lib库文件
#include"gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
在使用GDI+的资源之前,应该通过GdilpusStartup(启用GDI+资源)函数进行GDI+系统资源的初始化操作,而在程序结束前,应该通过GdiplusShutdown(关闭GDI+资源)函数进行GDI+资源的销毁操作。这两项工作,可以InitInstance()函数和析构函数中进行。
我们新建一个单文档的工程,接着我们在OnView函数中写入代码实现GDI+输出文本。

Graphics graphics(this->m_hWnd);
	Pen pen(Color(10, 0, 255, 255));
	SolidBrush brush(Color(255, 0, 0, 255));
	FontFamily fontfamily(L"Arial");
	Gdiplus::Font font(&fontfamily,30, FontStyleBold, UnitPixel);
	CRect rect;
	this->GetClientRect(&rect);
	PointF pointF(rect.right/2,rect.bottom);
	graphics.DrawString(L"C++技术网", 24, &font, pointF, &brush);

我们看看第一句代码,创建一个graphics对象,Graphics类有下雷击中构造函数:

static Graphics* FromHDC(HDC hdc);
static Graphics* FromHDC(HDC hdc,HANDLE hDevice);
static Graphics* FromHWND(HWND hwnd,BOOL icm);
static Graphics* FromImage(Image* image);
上述构造函数中的各参数意义如下:
hdc:设备环境句柄
hWnd:窗口句柄
icm:是否使用色彩配置文件校正色彩
image:图像对象
Hdevice:设备句柄
第二句代码,我在《利用GDI+实现水印(1)》中解释了一点,现在详述下:该函数第一个参数就是指我们写入的文字的透明度(因为我们这个程序代码就是实现文本的操作,所以就是指我们写入的文本的透明度)
第三句代码就是创建一个画刷对象,这个画刷会覆盖我们上句代码的画笔,因此,画刷的透明程度就会决定我们文本的透明程度哦
第四五句就是创建我们的字体,那么第四句中参数中的‘L’是什么意思呢?“L”标记这个宏标记是为了告诉编译器,引号内的文本应使用双字节(每个字符占两个字节)编码当时进行编译。因为在GDI+中字符是使用双字节的UNICODE(统一编码标准)方式来表示的。
第六七句代码就是创建一个矩形,接着我们调用函数getclientrect将客户区大小传递给我们新建的矩形。
第八句,我们将得到客户区的大小都除2,将其作为坐标点,作为我们输出的点
最后就是我们输出文本了: