17.6 CCoeControl的绘制支持
现在是时候总结迄今为止我们所了解的CCoeControl的绘制功能了。 首先,控件是覆盖全部或部分窗口的矩形。所有具体的控件(最终)是从抽象基类CCoeControl派生来的。控件、其他控件和窗口之间存在着各种各样的关系:
控件可以拥有窗口,或者是寄宿者;
控件可能有 0 或多个组件控件,控件的组件不能重叠,并且应该完全包含在控件的矩形中;
控件正好和一个窗口相关联,不管是作为拥有窗口控件还是寄宿控件;
所有的寄宿控件都是某些控件的组件(最终,该组件能够追溯到某个拥有窗口控件);
组件控件可以拥有一个窗口(比如,对于一个小的备份区域)。
控件包含对绘制、应用程序发起的重绘和系统发起的重绘的支持。应用程序通过使用DrawNow()函数要求控件进行绘制;当控件窗口的某一区域变成无效时,窗口服务器让控件进行绘制;在这两种情形下,调用Draw()来处理绘制。提供激活和释放并重置控件窗口上使用的图形上下文的函数。
17.6.1 控件环境
每一控件含有一个指向控件环境(control environment)的指针,任何控件通过指定ControlEnv()(公共的)或iCoeEnv(受保护的),可以访问控件环境。
从派生的控件或应用程序 UI 类,包括你自己应用程序的应用程序 UI,你可以通过 iCoeEnv来访问 CCoeEnv。如果有一个指向控件或应用程序 UI 的指针,可以使用它的公共函数ControlEnv()。如果这两者都不能访问,可以使用静态函数CCoeEnv::Static(),它使用线程本地存储(TLS)来找出当前环境。如果需要频繁的访问,因为TLS不是特别快,还可以在对象的某个地方存储一个指针用于更快的访问。
控件环境包括以下工具(见图17.11):
对基本GUI资源的访问,这些资源包括:窗口服务器会话、窗口组、屏幕设备和图形上下文;
一个持久可用的文件服务器会话,通过FsSession()使用;
用于向屏幕绘制的标准字体(10 磅 sansserif),通过NormalFont()使用;
()函数,用来刷新窗口服务器缓冲并等待片刻(可选);
便利函数,用来创建新的图形上下文和屏幕设备字体;
对多资源文件和读取资源的许多函数的支持(参见第13章)。
完整的清单参见coemain.h中CCoeEnv的定义。
【责任编辑:
董书 TEL:(010)68476606】