VC++ GDI+编程的字体和文本绘制

字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸等多方面的属性。适当地选用不同的字体,可以大大地丰富文字的外在表现力。例如,把文字中某些重要的字句用较粗的字体显示,能够体现出突出、强调的意图。当然,文本输出时还可使用其格式化属性和显示质量来优化文本显示的效果。

字体属性和字体创建

字体的属性有很多,这里主要介绍字样、风格和尺寸三个主要属性。

字样是字符书写和显示时表现出的特定模式,例如,对于汉字,通常有宋体、楷体、仿宋、黑体、隶书以及幼圆等多种字样。GDI+是通过FontFamily类来定义字样的,例如下面的代码:

程序代码:

FontFamily fontFamily(L"幼圆"); // 定义"幼圆"字样

字体风格主要表现为字体的粗细和是否倾斜等特点。GDI+为用户提供了一些预定义的字体风格:FontStyleRegular(正常)、FontStyleBold(加粗)、FontStyleItalic(斜体)、FontStyleBoldItalic (粗斜体)、FontStyleUnderline(下划线)和FontStyleStrikeout(删除线)。

字体尺寸是用来指定字符所占区域的大小,通常用字符高度来描述。字体尺寸可以取毫米或英寸作为单位,但为了直观起见,也常常采用一种称为点的单位,一点约折合为1/72英寸。对于汉字,还常用号数来表示字体尺寸,初号字最大,以下依次为小初、一号、小一、二号、小二??,如此类推,字体尺寸起来越小。GDI+为用户提供了UnitDisplay(1/75英寸)、UnitPixel(像素)、UnitPoint(点)、UnitInch(英寸)、UnitDocument(1/300英寸)、UnitMillimeter(毫米)等字体尺寸单位。

使用GDI+中的Font类,可以直接通过构造函数创建一个字体对象,例如下列代码:

程序代码:

Font font(&fontFamily, 12, FontStyleRegular, UnitPoint);

构造函数的第一个参数是用来指定FontFamily类对象指针,第二参数是用来指定字体的尺寸,它的实际大小取决于第四个参数所指定的尺寸单位。第三个参数用来指定字体风格。

为了与原来的GDI字体相兼容,Font的构造函数还有另外一种型式:

程序代码:

Font( HDC hdc, const LOGFONTW* logfont)

其中,hdc是用来指定一个窗口的设备环境句柄,logfon是指向LOGFONT(逻辑字体)数据结构的指针。

文本输出

文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、对齐方式、字符间隔等有很大关系。GDI+只有一个输出文本的函数DrawString,它的原型如下:
程序代码:

DrawString( const WCHAR* string, INT length, const Font* font,
const RectF& layoutRect, const StringFormat* stringFormat,
const Brush* brush );

DrawString( const WCHAR* string, INT length, const Font* font,
const PointF& origin, const Brush* brush );

DrawString( const WCHAR* string, INT length, const Font* font,
const PointF& origin, const StringFormat* stringFormat,
const Brush* brush);

时间: 2024-08-31 10:46:56

VC++ GDI+编程的字体和文本绘制的相关文章

深入浅出VC++串口编程之短信应用开发

前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的 应用实例:西门子短信服务模块TC35的串口控制. 1.短信控制终端 作为短信 (Short Message Service,SMS)一族,想必你有这样的体会:用手机编辑短信息十分不便. 容易出错,而且修改费时,若能用计算机来收发短信则方便许多.注意,本文所说的用计算 机收发短信并不是说通过"网易短信王"等方式在In

【转】VC++ ADO编程入门简介

VC++ ADO编程入门简介  一.ADO简介    ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API.DAO.RDO都要容易使用,并不失灵活性.本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例代码.    本文示例代码     二.基本流程    万事

Android中用StaticLayout实现文本绘制自动换行详解

前言 使用Canvas的drawText绘制文本是不会自动换行的,即使一个很长很长的字符串,drawText也只显示一行,超出部分被隐藏在屏幕之外.可以逐个计算每个字符的宽度,通过一定的算法将字符串分割成多个部分,然后分别调用drawText一部分一部分的显示, 但是这种显示效率会很低. StaticLayout是android中处理文字换行的一个工具类, StaticLayout 已经实现了文本绘制换行处理,下面是如何使用 StaticLayout 的例子: 示例代码 package com.

深入浅出VC++串口编程之第三方类

串口类 从本系列文章可以看出,与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控 件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出 OnComm消息)方式实现串口的异步访问. 尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类 型对象与字符串的转化等.因此,国内外许多优秀的程序员自己编写了一些串口类,使用这 些类,我们将可以更方便的操作串口.在笔者的<深入浅出Win32多线程程序设计之综合实例 >

VB VC混合编程疑难问题解答

我们在编写VisualBasic应用程序的时候常常需要自己动手编写一些库函数或ActiveX控件,而这些函数或者控件常常采用VC 语言来写,因而也常为VB和VC两种语言之间不同参数类型.内存空间使用方法等问题为难,怎么做好呢?本文介绍了在VB和VC混合编程的情况下对这些问题的解决方法. 一.自定义类型参数向DLL库函数的传递 用VB,VC 进行混合编程时,通常需要在VB中调用VC 编写的DLL库函数,这时,一般都要遇到向库函数传递参数的问题.对于标准类型(如Double,Long等)参数,其传递

语言 vc++-VC++ 简单编程题的问题

问题描述 VC++ 简单编程题的问题 #include #include int main() { char a[1000][100],b[1000][100]; int t,i,j,n,fa=0; printf("Please input test times: "); scanf("%d",&t); printf("Output:n"); for(i=0;i { printf("Please input game times

vc++-VC++串口编程求助。。。。。

问题描述 VC++串口编程求助..... 非常著名的serialport类中有这么一段代码: bResult = WaitCommEvent(port->m_hComm, &Event, &port->m_ov); if (!bResult) { // If WaitCommEvent() returns FALSE, process the last error to determin switch (dwError = GetLastError()) { case ERRO

如何用gdi+来指定一行中文本的不同的颜色?

问题描述 如何用gdi+来指定一行中文本的不同的颜色? 如何用gdi+来指定一行中文本的不同的颜色,效果就是输出的一行字符中我指定的几个字符为特定的颜色表示,该如何做呢? 解决方案 指定一行中文本不同颜色Android --- TextView中文本的不同颜色Android:TextView中文本的不同颜色 解决方案二: 使用渐变画刷即可! 例:textRect表示文本显示矩形区,startColor,endColor文本表示开始及结束颜色 protected override void OnP

c#-C# gdi+ 如何让字体旋转

问题描述 C# gdi+ 如何让字体旋转 Bitmap bTextBmp = new Bitmap(20 50); Graphics gphText = Graphics.FromImage(bTextBmp); gphText.TranslateTransform(10 25);//平移到适当的位置,以便下面旋转后可以显示 gphText.RotateTransform(90);//旋转角度,以达到你要的效果 // gphText.DrawString(""counts"&