Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15308996
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: C/C++

2007-08-29 11:33:12

μC/GUI-v3.90a学习笔记5
在FRAMEWIN_CreateEx创建函数中首先将WinFlags |= WM_CF_LATE_CLIP;
表示"Paint绘制时,剪切计算始终在_FRAMEWIN_Callback中自己完成---内部控件很多时,能够显著提高效率",
不由WM_Exec1()->_DrawNext()->_Paint()->WM__PaintWinAndOverlays()->_Paint1()函数完成剪切域计算,
static void _Paint1(WM_HWIN hWin, WM_Obj* pWin) {
  int Status = pWin->Status;
  if ((pWin->cb != NULL) && (Status & WM_SF_ISVIS)) {
    WM_MESSAGE Msg;
    WM__PaintCallbackCnt++;
    if (Status & WM_SF_LATE_CLIP) {
 
//说明该窗体要自己完成整个剪切计算[gliethttp]
 
//比如FrameWin控件,FrameWin回调函数piant消息绘制时,如果调用函数GUI_Clear(),
 
//那么FrameWin内部控件部分不会被擦除,而是根据剪切域窄条擦除.
 
//这样不用反复发送WM_SendMessage()消息,在WM_PAINT处理中一次搞定
      Msg.hWin = hWin;
      Msg.MsgId = WM_PAINT;
      Msg.Data.p = (GUI_RECT*)&pWin->InvalidRect;
      WM_SetDefault();
      WM_SendMessage(hWin, &Msg);
    } else {
      WM_ITERATE_START(&pWin->InvalidRect) {
 
//剪切域仅仅由_Paint1提供,hWin的回调函数WM_PAINT消息处理时,[gliethttp]
 
//如果还有剪切域计算的调用,那么因为++_ClipContext.EntranceCnt > 1所以将直接返回1,
 
//所以在hWin的回调函数,WM_PAINT消息处理中使用的剪切域窄条,将是_Paint1计算出来的值 
 
//比如MULTIPAGE控件,MULTIPAGE回调函数piant消息绘制时,如果调用函数GUI_Clear(),
 
//那么它不会再计算剪切域,而是直接使用_Paint1计算出来的剪切域,来避开内部控件所在区域
 
//如果有很多窄条剪切域,那么会反复发送消息WM_SendMessage(),效率不如WM_SF_LATE_CLIP属性
 
//所以我觉得,如果一个内部有很多控件的父窗体,为了提高效率,它的属性应该设置成WM_SF_LATE_CLIP
        Msg.hWin = hWin;
        Msg.MsgId = WM_PAINT;
        Msg.Data.p = (GUI_RECT*)&pWin->InvalidRect;
        WM_SetDefault();
        WM_SendMessage(hWin, &Msg);
      } WM_ITERATE_END();
    }
    WM__PaintCallbackCnt--;
  }
}

阅读(3505) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-10-10 09:35:24

使用双buffer机制或者打开cache或者只能提高cpu速率,ucgui的GUI_Clear函数涉及到Z域剪切计算,如果lcd屏幕上绘制的控件越多,那么进行z域剪切计算遍历这些控件所花费的时间也就越多,个人感觉没有什么好方法,只能在控件布局时尽量减少控件之间在z序上的彼此交叠!

nustcxq2008-10-09 21:38:29

初始化程序是执行GUI_Clear(), 速度很慢,请问如何优化?

chinaunix网友2008-07-17 16:01:30

楼主,请问您这是从哪本书看的吗,可以介绍一下吗