Graphics(2) |
||||
| 作者:剑走偏锋 来源:开发视界 发布时间:2005-12-20 0:10:12 | ||||
|
绘图接近一个控制,他包含了CCoeControl(控制的基础类),依靠CWindowGc提供的方法来实现.我们可以使用CCoeControl::SystemGc来访问CWindowGc,也可以通过CEikonEnv::Static()->SystemGc()来访问CWindowGc的外部控制连接. 为了获得一些屏幕显示的特性,比如显示模式,需要使用CWsScreenDevice提供的一些方法.而使用CWindowGc: evice方法也是可以实现的.每一个控制都从CCoeControl继承了他所包含的一个Draw方法,然后在控制类中实现.下面代码是一个Draw方法的示例,也包含了如何使用CWindowGc.
Draw方法的TRect参数说明了错误区域,需要被重画.(实际上,你不能在规定的区域外面画图,这样超过的部分会被剪裁掉.)有时候,给定的方形区域往往被忽视了,不过用redraw就很简单了.在很多情况下,尤其是在一些游戏里,出现这种情况的时候会重画整个控制. Draw会被框架调用,而且Draw方法不能被直接调用.在如下情况下,Draw会被调用: 1.一个窗口被创建以后 2.其他事件,窗口内容不可用,例如处理重叠窗口 3.CCoeControl:drawNow或CCoeControl:drawDeferred方法被调用时,DrawNow调用立即绘图.当DrawDeferred只标记了控制区域不可用时,最终,窗口服务开始redraw方法. 在游戏里,常常使用一个间隔事件短的Timer来控制屏幕显示的更新,你可以使用DrawDeferred方法来重画屏幕.因为DrawDeferred方法的优先级比较低,他可以等待用户输入被完全处理结束以后再进行重画. 你不能认为每一次Draw方法的调用都是因为DrawDeferred方法被调用.DrawDeferred可以被多次使用,但是并不是每一次的DrawDeferred调用都会引起重画.因为DrawDeferred只是标记屏幕上不可用的区域,并发调用DrawDeferred在系统开始重画以前并没有效果.我们必须有计划的满足Draw方法,游戏的计算也不应该被Draw和时间器调用的DrawDeferred分开.通常情况下,使用Timer进行计算,而Draw只是显示当前需要显示的游戏部分.这样做不仅仅是因为redraw的问题,而且是为了将代码区分的更清楚. 也可以不使用Draw事件来完成Draw到一个控制上面的功能,在框架调用Draw方法的时候被自动完成,这需要添加下面几步: 1.CWindowGc::Activate来活动图形连接 2.通知窗口服务,使用RWindow::BeginRedraw 3.在控制上画 4.使用RWindow::EndRedraw通知窗口服务,绘图结束 5.使用RWindow::EndRedraw使图形连接不活动 示例代码如下:
|
||||
| [] [返回上一页] [打 印] | ||||
|
||||
文章评论 |
||||

evice方法也是可以实现的.
raw( const TRect& /*aRect*/
const