Symbian源代码还原之二——void CCoeControl::DrawNow(void) const

本文详细解析了S603RD中CCoeControl类的DrawNow方法,介绍了该方法如何实现视窗的重绘,并通过父控件进行背景绘制等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    以下是s60 3rd的void CCoeControl::DrawNow(void) const逆向还原,如有错误之处,敬请批评指正:)

void CCoeControl::DrawNow(void) const
{
 TRect rect = Rect();
 DrawNow(rect);
}

void CCoeControl::DrawNow(class TRect const & aRect) const
{
 if (EFalse == IsReadyToDraw())
 {
  return;
 }
 TBool isBackup = IsBackedUp();
 if (EFalse == isBackup)
 {
  Window()->Invalidate(aRect);
  Window()->BeginRedraw(aRect);
 }
 const CCoeControl* parentCtrl = SearchParent(this);
 if (parentCtrl)
 {
  if (EFalse == parentCtrl->OwnsWindow())
  {
   User::Invariant();
  }
  parentCtrl->ActivateGc();
  MCoeControlBackground ctrlBackgroud = parentCtrl->FindBackground();
  if (ctrlBackgroud)
  {
   CWindowGc& gc = SystemGc();
   ctrlBackgroud->Draw(gc, parentCtrl, aRect);
  }
  parentCtrl->Draw(aRect);
  parentCtrl->DrawComponents(aRect); 
  parentCtrl->DeactivateGc();
  if (EFalse == isBackup)
  {
   Window()->EndRedraw();
  }
  parentCtrl->DrawWindowOwningComponentsNow(aRect); 
 }
 else
 {
  ActivateGc();
  Draw(aRect);
  DrawComponents(aRect);
  DeactivateGc();
  if (EFalse == isBackup)
  {
   Window()->EndRedraw();
  }
  DrawWindowOwningComponentsNow(aRect);
 }
}



本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/sapair/archive/2009/08/24/4477034.aspx
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值