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;
}