7.打印
CExampleHelloView 是与一个设备无关的视图:它与屏幕设备没有任何的相关性。这意味着可以在一些有意义的上下文中重用该视图—特别是应用于打印。Symbian 操作系统包含其他的一些视图,这些视图以类似于 CExampleHelloView 的方式设计。这些视图的最佳示例就是从CTextView类中得来的富文本视图。
CExampleHelloView 可用于照原样的打印输出和打印预览,不用做任何修改就可以通过 UI支持这些功能。GDI 指定了一个传统的带(band)打印输出模型,其核心中包含一个带有虚函数的接口类。
TBandAttributes的定义如下:
如果希望自己的应用程序支持打印输出,使用GDI对话框来建立打印任务并开始打印。需要编写一个实现 MPageRegionPrinter 的类,然后将指针(MPageRegionPrinter*)传递给打印任务。接下来,打印机驱动程序在需要执行打印工作时调用PrintBandL()函数。
驱动程序调用 PrintBandL()的方式取决于打印机的特性。明显的,对于每一页,驱动程序都需要至少调用一次PrintBandL()。驱动程序可以:
每一页只调用一次PrintBandL(),指定页码和包含整个页面的矩形(在带属性中);
通过在多个带中覆盖页面来节省内存;
通过分别处理文本和图形来更高效地工作,例如,用一个带来包含所有的文本,而用一些小带包含图形。
作为 PrintBandL()的实现者,它显然必须遵循页码,以便打印每一页上的相关文本。是否注意带属性与是否注意传递给CCoeControl::Draw()的绑定矩形一样:如果忽略这些参数,代码可能也会运行良好。但是,通过只打印每个带所需的内容,则有可能大大加快打印速度。
可以在CExampleHelloView重用视图代码,以此来实现进行单页打印的PrintBandL()。
因为PrintBandL()是一个可能发生异常退出的函数,所以能够在该函数中分配字体。
该段代码将在一个 2 英寸×1 英寸大的矩形中打印文本,该矩形的左上角位于从页面边缘向下 2英寸,向右 2英寸—而不考虑页面大小和边距。更为实际的打印代码将考虑页面大小和边距,可在GUI对话框中进行相关设置。
CGraphicsDevice::CreateContext()函数创建适合于将图形输出到设备上的图形上下文。这是创建图形上下文的方式。简单地调用 CCoeControl::SystemGc()可获得一个图形上下文,该图形上下文是先前由CONE环境使用iScreenDevice->CreateContext()创建的。
8.富文本视图和其他视图
CTextView 富文本视图类提供了一个功能强大的视图,其中将特别复杂的功能隐藏在适度复杂的API下。该类支持富文本(从CEditableText中派生而来的模型对象)的格式化、显示、打印、编辑和快速屏幕更新—能足够高速键入几十页长的文档。UI可提供从CEikEdwin中派生而来的控件,例如UIQ的CEikRichTextEditor,可使用该控件进行富文本的编辑。
【责任编辑:
董书 TEL:(010)68476606】