方法一:
1.1 继承IDialogBuilderCallback类,重写CreateControl函数。
1.2 在使用该控件的类中继承OnCreate函数,代码如下:
CDialogBuilder builder;
CDialogBuilderCallbackEx cb;
CControlUI* pRoot = builder.Create(_T("LoginMainWnd.xml"), (UINT)0, &cb, &m_pm);
实例:在窗口MainWnd中自定义一个控件miFileName(该控件使用xml的形式定义),在控件miFileName里面定义一个CaoGifAnim控件。
如图:1、MainWnd中定义miFileName
2、miFileName控件中定义CaoGifAnim
3、mainWnd的CreateControl函数
4、miFileName控件的DoInit函数(关键是添加callback)
方法二:
2.1 在使用该控件的类中重写CreateControl函数。
2.2 使用WindowImplBase类实现的创建窗口的方法。也就是不重写OnCreate。
方法三:使用REGIST_DUICONTROL注册(在DuiLib_Ultimate中封装)。
未完待续...
在自定义控件中继承实现
LPCTSTR GetClass() const;
LPVOID GetInterface(LPCTSTR pstrName);
在窗口中继承实现
CControlUI* CreateControl();
说明一下:在自定义控件中添加void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);之后,在InitWindow中使用该控件对于的name找不到(这个问题找了很久的原因,最终发现是添加了SetAttribute导致的)。