设为首页 加入收藏

TOP

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

17.9.3  与设备无关的绘制

这一节将介绍 CExampleHelloView 类中与设备无关的绘制代码,以及 CExampleHelloControl类中少量与设备无关的代码,这些代码用于分配适当的字体。然后,我们也将看到 CExample HelloControl类如何使用绘制代码。

 

首先,注意到CExampleHelloView从CBase中派生而来,而不是从CCoeControl派生而来。所有CCoeControl派生而来的类都是与设备相关的,因为相关的控件将与屏幕紧密联系在一起。

绘制代码位于 DrawInRect()函数中,该函数以设备映射、图形上下文和在其中进行绘制的矩形作为参数。DrawInRect()函数可分为两个部分:绘制文本和在文本周围绘制边框。

1.绘制边框 从绘制方框的部分代码入手,下面的代码绘制一个方框,该方框具有与设备无关的尺寸。该方框具有2个像素宽,内边为黑灰色,外边为黑色。

 

所有图形上下文绘制函数都被指定为以像素为单位。因此,在绘制矩形之前,必须转换尺寸,将原先指定的以缇为单位的尺寸改为以像素为单位。使用图形设备映射的缇到像素转换函数来实现这一点。记住,aMap最终将使用屏幕设备,这就是可以获得缇所对应的像素数量信息的方式。

于是产生了这样一个问题:我们无法确保矩形是否确实完全包含在 aDeviceRect 中,而且,不应该在aDeviceRect外部绘制。在屏幕或其他设备上,都无法保证绘图被剪裁到aDeviceRect。因为现在需要保证这一点,所以显式地设置了一个剪裁矩形。

即使是与设备无关的绘制代码,也必须考虑设备的实际情况。

我们将以不同的方法来考虑设备的实际情况:虽然开始以缇为单位来计算环绕矩形的尺寸,但以像素为单位来进行显式扩充。无论所绘图形显示什么内容,都希望它包括一条2个像素的边框—间隔一定缇数的 2 条直线,在缩小的状态下,这 2 条直线将重叠;而在放大状态下,这 2条直线将有一定的间隔。

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

回书目   上一节   下一节

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

评论

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