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;
}
相关文章推荐
- Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
- [转载]C#如何在webBrowser1控件通过TagName,Name查找元素(没有ID时)遍历窗体元素
- Android 通过resource名称或者layout中定义的id name 去获取R.java中id,得到控件
- EasyUI中通过id获取不知道具体类型表单控件的值,通过自写map实现
- Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
- Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
- 通过控件的点击事件获取其id
- C# 实现读取本地某文件夹中的html文件,然后通过正则表达式获取input控件中的id值
- 通过id获取控件
- Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题
- C#通过API获取接收数据窗体控件句柄,并向该句柄发送文本信息
- C#如何在webBrowser1控件通过TagName,Name查找元素(没有ID时)遍历窗体元素
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题)
- android换肤功能 如何动态获取控件中背景图片的资源id?
- DataGrid 通过内部控件获取所在控件的列索引
- Android自动化测试—获取、区分具有相同Id的多个控件
- 获取鼠标停留位置页面控件ID
- 用JavaScript获取Gridview中某个触发事件控件的ID
- ViewPager中动态添加XML布局文件,并获取XML文件中控件ID的操作(inflate)