选择显示字体大小

vc++.net中使用gdi+创建特效字体


  来自于微软.net技术的c++托管扩展所包含的gdi+技术功能十分强大,本文将介绍如何使用gdi+的画刷来绘制文本。

  一、使用画刷绘制文本的基本技术

  本文所带的例子程序允许用户定义所要显示的文本、字体尺寸、显示文本所用的画刷(网格画刷或渐变画刷)以及绘制文本的颜色等。例子代码下载:gdiplustextwithbrushes.zip

  下面是gdi+中使用渐变画刷或网格画刷绘制文本的基本步骤:

  1、 在控件的绘制(paint)事件中添加一个事件处理函数。

  在这个处理函数中进行绘制文本的相关处理,这样控件才能正确地进行重绘。

  2、 获取一个图形(graphics)对象。

  正如我们所熟悉的设备上下文一样,图形对象.net封装的一个绘制平面,例如,当在一个picturebox控件上进行绘制时,可以调用picturebox::creategraphics方法来获取一个graphics对象,并在控件上绘图时使用这个图形(graphics)对象。互联网上有很多例子都是这么做的,但是,有一个问题是,这样得到的graphics对象不是永久对象,如果用户从当前程序转到另一个应用程序并再次返回时,这个控件将无法正确地进行重绘。所以 ,要得当图形对象应当使用传递给控件paint方法的painteventargs对象中的graphics对象,代码如下所示:

private: system::void pictext_paint(system::object * sender,
system::windows::forms::painteventargs * e)
{
...
graphics* g = e->graphics;

  3、实例化一个字体对象

  在字体类的13个构造函数中,最基本的一个构造函数只需要你提供字体名及字体的大小。在下面的例子中,创建了一个20点,"times new roman"类的常规字体:

using namespace system::drawing;
...
font* font = new font(s"times new roman", 20, fontstyle::regular);

  4、测量将被绘制的文本尺寸

  为了绘制文本需要使用graphics::measurestring方法来测量文本尺寸。可以使用graphics::measurestring方法来完成这个任务。这个方法需要提供被测量的文本及字体对象,并返回sizef结构对象,这个结构包含了将要进行绘制文本的尺寸。

sizef textsize = g->measurestring(s"my sample text", font);

  5、实例画刷对象

  可以使用各种各样的画刷进行绘制文本,包括网格画刷、线性渐变画刷、路径渐变画刷、实体画刷及纹理画刷等,只是在创建各个不同的实例画刷时传递的参数有一些小小的不同而已。对各种画刷进行探讨不是本文的内容,在本文的实例中只使用两种画刷(网格画刷及线性渐变画刷)。

// hatchbrush example
brush* brush = new hatchbrush(hatchstyle::cross,
color::black, color::blue);
// lineargradientbrush example
rectanglef* rect = __nogc new rectanglef(pointf(0, 0), textsize);
brush= new lineargradientbrush(*rect, color::black, color::blue,
lineargradientmode::forwarddiagonal);

  6、(选项)填充背景

  为了使应用程序有特色,可以在绘制文本前对背景进行颜色填充,这有两个标准的方法。较简单的方法是调用graphics::clear方法并定义将使用的颜色;但是有时需要更高级的控制,这时候需要使用graphics::fillrectange方法。

  graphics::fillrectange方法允许开发人员规定所选择的画刷对象并定义确切的矩形坐标位置。关于画刷对象,可以使用实例化的自定义画刷或者是系统画刷systembrushes,系统画刷定义了若干属性成员,它们是实心画刷,各自用来表现窗口的不同的元素,包括激活的边框及标题条等。

// use the windows-defined color for controls
// and explicitly state the rectangle coordinates
g->fillrectangle(systembrushes::control, pictext->left, pictext->top,
pictext->right - pictext->left, pictext->bottom - pictext->top);

// color the entire drawing surface using white
g->clear(color::white);

  7、绘制文本

  一旦将所有的gdi+对象实例化后,下面所需要做的事就是调用graphics::drawstring方法。下面的例子使用了这个方法,在这个方法里规定了需要显示的文本、画刷和字体及显示文本的位置。

// center the text on the drawing surface
g->drawstring(txttodisplay->text, font, brush,
(pictext->width - textsize.width) / 2,
(pictext->height - textsize.height) / 2);


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons