设为首页 加入收藏

TOP

17.9.3 与设备无关的绘制(3)
2013-10-07 01:06:34 来源: 作者: 【 】 浏览:72
Tags:17.9.3 设备 无关 绘制

3.缩放和字体

在继续介绍前,我们先探讨一些用非常小的缩放因子缩放文本的相关问题。如果没有合理地处理它,那么以较小缩放因子进行缩放的文本宽度将与其高度不成比例。图 17.16 显示了这个问题的效果,文本的宽度超出周围边框的范围。

即使字体太小而无法阅读,我们可能仍然希望显示单词、句子和段落的完整形状。这种需求一般应用于打印预览和Symbian操作系统的富文本视图,与我们的应用程序不同的是,即使在字体小于一个像素的情况下,它也可适当地处理并显示字体。并不是所有的智能手机视图都必须支持这一点。因此,对于许多手机来说,这并不是一个真正的问题。

从TFontSpec中获得CFont*时,同时从缇尺寸转换为像素尺寸,正如所预测的那样,像素不需要是正方形的,但字体的高度和宽度将按比例缩放。但是,在宽度小于一个像素的情况下,字符将不能显示,因为写一个字符的最小单位是一个像素,所以需要特殊的比例支持。

一种合理的解决方案是在将结果转换为以像素为单位显示之前,以缇为单位来计算整个字符串的宽度。如果每个像素有多于一个的字符,那么字符串长度无法以像素正确计算。

4.绘制文本

我们可以看到在DrawInRect()函数中如何使用已分配的字体。 

 

该段代码中使用的 DrawText()函数指定了一个矩形,并且保证在该矩形中剪裁绘制。然而,如果设置了iFullRedraw,DrawText()将在绘制前产生一个白色背景。当iFullRedraw被设置,画刷设置将是实心的和白色的,这将会产生白色的背景;如果没有设置,实际上不存在画刷,并且在原先的背景上直接绘制文本,即 UI 框架绘制的对话框背景图像。在实际程序中,重绘背景是无条件执行的;根据应用程序、用户界面和特殊的手机的需要,应用程序总是使用框架绘制的图像,或者显式地绘制任何需要的背景。

5.使用视图

CExampleHelloControl具有用于绘制相关模型的CexampleHelloView。

 
 

首先,CExampleHelloControl绘制10个像素宽的环绕边框。确保该段代码的输出位于屏幕上,并且选择的10个像素宽的边框与缩放状态无关(如果边框根据缩放状态而进行缩放,看起来将很别扭)。

代码确保绘制每个像素:使用 DrawUtils::DrawBetweenRects()将包含文字的矩形和控件外部之间的区域变成白色。然后,使用画笔在边框的内部绘制一个矩形。接下来,该矩形将收缩1个像素,并且传递给Hello视图的绘制函数。

该示例所要表明的基本点是:可以实现完全与控件和屏幕设备无关的绘制代码。

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

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇17.9.3 与设备无关的绘制(4) 下一篇17.9.3 与设备无关的绘制(2)

评论

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