对于xml文件中的自定义控件的创建和绘制是这样滴:

第一步主窗口的xml资源文件中肯定包含了,自定义控件的添加声明,此时在CDialogbuilder进行解析过程中会,查找到,此控件非DuiLib自带的,所以肯定是用户自定义控件,所以会调用CreateControl函数来进行,自定义控件的创建和绘制。
我们在主窗口类中,重载CreateContrl方法,判断给定的类名称是否为所要创建的控件类名,然后new一个空间并返回即可……
CreateControl的返回值是一个CControlUI类型的指针。。。所以我们一般的控件也都必须继承CControlUI……
进一步理解:
DuiLib是根据鼠标点击的屏幕位置来进行判断是哪个控件,然后判断鼠标的动作,给定一个消息,并通知主窗口,主窗口根据btn添加的代理来处理该事件。
LBUTTONDOWN 中设置了EventClick的来源,在LBUTTONUP当中发送UP消息之后,
EventClick被置为NULL。
一个按钮的事件代理,是一个
TStdPtrArray
<
CDelegateBase
*>
m_aDelegates
;
是个数组,可以添加多个代理,对应于不同类型的事件,或者消息……
CControlUI当中包含着一系列数据成员:
CEventSource用于添加一些事件源,OnNotify += 意思就是用于添加一个事件相应处理函数,当接收到该时间之后,就会在响应的函数内处理……
btn->OnNotify += MakeDelegate(this, &MainWindow::OnBtn, DUI_MSGTYPE_CLICK);在CControlUI的事件代理中,通过 CDelegate:: Invoke 来调用该函数
这样,鼠标事件的流程便走通了。