ucGUI通过ID获取控件WM_GetDialogItem会递归子窗体。

ucGUI通过ID获取控件WM_GetDialogItem会递归子窗体问题。

ucGUI版本3.94

在一个窗体里可以用WM_GetDialogItem这个过程检索其内的子窗体,看源码内部,但这个过程会递归的查找其内的子窗体,

File        : WM_GetParent.c
Purpose     : Windows manager, add. module

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) {
    /* This windows Id matching ? */
    if (WM_GetId(hi) == Id) {
      return hi;
    }
    /* Any child windows Id matching ? */
    if ((r = _GetDialogItem(hi, Id)) != 0) {
      break;
    }

    hi = WM_HANDLE2PTR(hi)->hNext;
  }
  return r;
}

如果我们的窗体里包括子窗体,这样我们在使用的过程中需要注意一下了,在一些自己做的复杂点的窗体里就有可能出错。

根据使用的习惯我觉得还是不要递归的查找子窗体为好,只要去掉上面红色字体的代码就可以了。


2012-10-17

 昨天,发现一个问题,UCGUI调用wm_exec时出错了,发现是上面改了_GetDialogItem 这个方法导致的,看来不能这样注释上面的红色字体了,如果自己在查找一个窗体下面的子控件时,最好还是自己写一个新的方法吧。


static WM_HWIN _GetDialogItemEx(WM_HWIN hWin, int Id) {
  WM_HWIN hi;
  WM_HWIN r =0;
  WM_Obj* pWin = WM_H2P(hWin);
  hi = pWin->hFirstChild;
  while (hi) {
    /* This windows Id matching ? */
    if (WM_GetId(hi) == Id) {
      return hi;
    }


    hi = WM_HANDLE2PTR(hi)->hNext;
  }
  return r;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值