DuiLib CreateControl

来源:互联网 发布:铁岭网络预约出租汽车 编辑:程序博客网 时间:2024/05/23 14:09
对于xml文件中的自定义控件的创建和绘制是这样滴:
第一步主窗口的xml资源文件中肯定包含了,自定义控件的添加声明,此时在CDialogbuilder进行解析过程中会,查找到,此控件非DuiLib自带的,所以肯定是用户自定义控件,所以会调用CreateControl函数来进行,自定义控件的创建和绘制。

我们在主窗口类中,重载CreateContrl方法,判断给定的类名称是否为所要创建的控件类名,然后new一个空间并返回即可……
CreateControl的返回值是一个CControlUI类型的指针。。。所以我们一般的控件也都必须继承CControlUI……
http://www.cnblogs.com/Alberl/p/3352696.html

进一步理解:
DuiLib是根据鼠标点击的屏幕位置来进行判断是哪个控件,然后判断鼠标的动作,给定一个消息,并通知主窗口,主窗口根据btn添加的代理来处理该事件。
LBUTTONDOWN 中设置了EventClick的来源,在LBUTTONUP当中发送UP消息之后,EventClick被置为NULL。


一个按钮的事件代理,是一个TStdPtrArray<CDelegateBase*> m_aDelegates;是个数组,可以添加多个代理,对应于不同类型的事件,或者消息……

CControlUI当中包含着一系列数据成员:

CEventSource用于添加一些事件源,OnNotify += 意思就是用于添加一个事件相应处理函数,当接收到该时间之后,就会在响应的函数内处理……
btn->OnNotify += MakeDelegate(this, &MainWindow::OnBtnDUI_MSGTYPE_CLICK);
在CControlUI的事件代理中,通过CDelegate::Invoke来调用该函数


这样,鼠标事件的流程便走通了。





























0 0