设为首页 加入收藏

TOP

17.2.4 绘制函数
2013-10-07 01:03:55 来源: 作者: 【 】 浏览:65
Tags:17.2.4 绘制 函数

17.2.4  绘制函数

一旦按照偏好设置好图形上下文,在屏幕上绘制的方式将会多种多样。所有图形上下文函数都是虚拟的,因此能够在派生类中实现它们。而且,所有图形上下文函数都被设计为能成功执行的,因而不返回任何值(在 C++(www.cppentry.com)声明中,它们返回 void)。这一要求导致多个图形上下文命令能够批处理为一条消息,并发送到服务器执行。如果某个图形上下文命令有返回值,这将是不可能的。

1.点和线

可以绘制单一的点或绘制一段弧线、一条直线或者一条折线。这些函数都使用当前画笔;它们在gdi.h中声明。

  

注意,绘制直线(包括弧和折线的最后一条直线)不包括直线的最后一点。和 TRect的规范一样,这是好坏掺半的事:有时候它使事情更容易,有时候更难。如果最后一个像素自动绘制,那么在不希望发生这种行为的情形下,就难以避免绘制该像素。然而,通过使用 Plot(),就相当容易解决这一棘手的问题了。

关于DrawArc()参数的解释,请查看SDK。

DrawPolyLine()从当前光标位置开始。实际上,DrawPolyLine()使用DrawLineTo()来绘制指定的所有的点。

2.实心图形

能够绘制若干实心图形:饼图、椭圆、矩形、圆角矩形或多边形。这些函数使用画笔和画刷。画笔只用来绘制轮廓。画刷只用来绘制图形。使用两者来绘制带轮廓的图形。

   

DrawPie()的参数本质上与DrawArc()的参数相同。

DrawPolygon()连接所有指定点,并填充它们围起来的区域,几乎和DrawLine()一样,没有、也不需要使用相对绘制。可能会绘制出自相交多边形,在这种情形下,填充规则参数指定偶封闭校验的区域的行为。详情请查看 SDK和 grshell示例。和其他绘制函数不一样,DrawPolygon()函数可以返回错误。这是因为参数能指定任意大小的数据并且需要分配内存来处理它们。

3.位图

能够以1 1∶的比例,或者拉伸到适合所指定的矩形来绘制位图。这些函数如下所示。 

   

对于 GUI 图标的高性能贴图(Blitting)1传送,使用大小相同的版本;对于支持屏幕缩放和打印与设备无关的视图代码,使用拉伸版本。如果上面函数调用的源和目标包含相同数目的像素,那么它们切换到高性能工作方式。但是,在CBitmapContext级别加入到图形上下文类的函数,被称作BitBlt,进行一对一的绘制,总是很快的。

4.文本

可以使用当前字体绘制文本。以下是完成它的函数。

   

第一个(也是比较简单的)函数使用图形上下文的对齐设置,但不应自己调用它。相反,如果需要处理恰当布局的文本,使用FORM。通常的用法是,使用剪裁文本到指定矩形的TRect变量,并用当前画刷绘制矩形的背景。

图形上下文没有默认的字体,如果在调用文本绘图函数之前没有调用UseFont(),将导致严重错误。当绘制到 CWindowGc 时出现严重错误提示特别可怕,因为所有的窗口绘图函数是共同执行批处理的。它们被发送到窗口,然后执行。窗口服务器没有检测到缺少字体,直到执行缓冲,这时已经没有关于在何处出现严重错误提示的上下文信息了。请牢记使用完字体之后使用DiscardFont()来删除字体,以避免内存泄漏。

绘制时如果出现严重错误,并且无法知道是哪个绘制命令出错,那么可以使用窗口服务器的自动刷新功能(autoflushing)。调用函数RWsSession:: SetAutoFlush(ETrue)意味着每个绘制命令在它产生之后马上被发送到窗口服务器,因此在下一个命令执行之前严重错误就会发生。这只应该在调试模式下使用,因为这通常会极大降低绘制及其他代码的性能,而且可能增加用户看到的闪烁次数。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇17.2 CGraphicsContext API 下一篇17.2.1 坐标类

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: