您的位置:首页 > 产品设计 > UI/UE

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

2012-10-11 14:24 357 查看

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐