RootForm对form的关于及RootContainer对IWidget的管理和事件处理
来源:互联网 发布:正规淘宝客服要交钱吗? 编辑:程序博客网 时间:2024/06/11 21:08
大家每次在做调试的时候会发现栈会很深,大部分都是在buiw中,初看似乎很复杂,但是如果真正了解流程了,也就没有那么复杂了,现就对自己了解的做以阐述,也请大家指正。
先从RootForm的创建开始,RootForm中创建了相关的Display,RootContainer,还有一个很重要的东西就是Form的piwidget,piwidget是从RootContainer中查询出来的,还创建了相应的VectorModel。rootContainer是用来管理插入到rootForm中的Form的WIdget的,VectorModel是用来管理form的。Display其实创建的也是每个app的display,每个应用都有自己的一个RootForm。
将Form插入到rootForm中主要会做两步操作,第一:将Form添加到vectorModel中。第二:将每个Form中的Widget放到RootContainer中,具体做法就是利用IForm_getWidget(pIForm,WID_Form,&piwidget);IRootContainer_insert(....).
从RootForm中remove一个form就是添加的相反操作了。
再来看事件处理,在rootForm_handleEvent中有这么一句:IWIDGET_HandleEvent(FORM_WIDGET(me), evt, wParam, dwParam)这一句也就标志了RootForm首先去处理了控件的事件,那这个事件又是怎样去调用的呢,FORM_WIDGET(me)其实就是rootform中form的piwidget指针,那这个指针是在什么时候赋值的呢,在刚开始rootform创建的时候:IROOTCONTAINER_QueryInterface(me->piContainer, AEEIID_WIDGET, (void **)&me->base.piWidget),这样就把这样一个指针和rootContainer联系起来了,其实IWIDGET_HandleEvent这个事件就是去调用了rootContainer的Handle然再有rootContainer再去找它里面相对应的控件,也许这个rootContainer放的还是一个Container的一个widget指针,那就又会到ContainerBase的指针,再找里面的控件,直到找到真正的widget为止。
- RootForm对form的关于及RootContainer对IWidget的管理和事件处理
- 对sharepoint 的form library的事件进行处理(二)开发事件处理程序
- 关于对跨浏览器实现的事件处理程序
- Android层面上对sensor及event事件的处理
- 对sharepoint 的form library的事件进行处理(三)部署到sharepoint
- 对sharepoint 的form library的事件进行处理(一)概述
- 关于对XML的处理
- XForm 表单对函数和事件处理功能的支持
- Qml实现对鼠标和键盘事件的简单处理
- Struts2的处理流程和对Action的管理方式
- mysql 分区管理和对NULL的处理
- js对事件的封装处理
- view对touch事件的处理
- Android对onTouch触摸事件的处理
- View对Touch事件的处理
- OpenCV对鼠标事件的处理
- QML对键盘事件的处理
- android 中对返回事件的处理
- oracle建多个dblink
- java常用词汇1
- 我的留学生活[4]-韩国人眼中的中国!
- 支持打印效能的ListView种
- 用DataGrid导出列表信息到Excel C#
- RootForm对form的关于及RootContainer对IWidget的管理和事件处理
- 大会讲师系列访谈:Windows系统内核专家-张银奎
- VC6.0到VS2008升级项目
- CE真的是有点难度
- 计算机专业词汇1
- org.springframework.security.userdetails.memory.InMemoryDaoImpl安全配置
- CACHE与主存之间的全相联映射,直接映射和组相联映射的区别
- 碰到的一系列的问题
- update 字符集