Chinaunix首页 | 论坛 | 博客
  • 博客访问: 974354
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2010-03-08 10:42:48

//一直觉得递归函数是一种比较高级的东西,可以实现很多微妙的功能
//下面就是μC/GUI中一个递归函数,通过该递归函数调用,遍历hWin下的所有孩子以及孩子的孩子--窗体控件
//找到孩子们当中id号匹配者,返回该孩子的hwin句柄.
//但是因为递归的原因,所以每一次递归函数的进入,都会占用一部分堆栈空间,
//当子控件很多时,堆栈容易溢出,尤其使用μC/OS-II线程堆栈的时候,因为每个task都有一个
//属于自己的进程堆栈,所以更需要小心堆栈溢出.

static WM_HWIN _GetDialogItem(WM_HWIN hWin, int Id) {
  WM_HWIN hi;
  WM_HWIN r =0;
  WM_Obj* pWin = WM_H2P(hWin);
  hi = pWin->hFirstChild;
  while (hi) {
    if (WM_GetId(hi) == Id) {
      return hi;//找到了id对应的hwin
    }
    if ((= _GetDialogItem(hi, Id)) != 0) {
//一直递归下去,直到孩子的孩子的孩子的孩子的...没有孩子为止,才返回到上一个孩子的sibling,看看
//sibling的孩子的孩子的孩子的...怎么样,就这样一个不落的遍历了hWin下的所有孩子,找到id匹配的窗体控件之后
//递归调用将一路不带停歇的返回
      break;
    }
    hi = WM_HANDLE2PTR(hi)->hNext;
  }
  return r;
}
阅读(534) | 评论(0) | 转发(0) |
0

上一篇:ucgui的字库

下一篇:uC/GUI的文字显示系统

给主人留下些什么吧!~~