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