用Duilib开发界面时,很多情况下库自带的控件不满足需求,就需要基于Duilib建立自定义控件(自绘新的控件,或者用来封装win32的子窗体,来显示视频、网页等)。
在群里经常会有刚接触Duilib的朋友问题怎么建立自己的自定义控件,或者建立的控件无法正常创建出来。我简单写一篇博客,把创建自定义控件的完整过程,和一些注意事项说明一下。另外说一下如果把win32的子窗体封装为控件,希望能有帮助。
在群里经常会有刚接触Duilib的朋友问题怎么建立自己的自定义控件,或者建立的控件无法正常创建出来。我简单写一篇博客,把创建自定义控件的完整过程,和一些注意事项说明一下。另外说一下如果把win32的子窗体封装为控件,希望能有帮助。
创建自定义控件包含两个过程:1、继承现有的控件类创建新的控件类2、让程序识别新的控件并可以在xml中使用
class ComputerExamineUI : public CContainerUI //1.创建一定要的控件 { public: ComputerExamineUI() { CDialogBuilder builder;//2.自定义控件绑定xml文件 CContainerUI* pComputerExamine = static_cast<CContainerUI*>(builder.Create(_T("ComputerExamine.xml"), (UINT)0)); if( pComputerExamine ) {//3.添加xml绘制控件到自定义控件 this->Add(pComputerExamine); } else { this->RemoveAll(); return; } } };
class CDialogBuilderCallbackEx : public IDialogBuilderCallback {//4.让程序识别出自定义控件 public: CControlUI* CreateControl(LPCTSTR pstrClass) { if( _tcscmp(pstrClass, _T("ComputerExamine")) == 0 ) return new ComputerExamineUI; return NULL; } };新的控件名为CSkinPickerPictureItemUI。一般来说,建立新控件后,最先应该重写的两个函数是GetClass和GetInterface。他们后用来区分控件的类型的虚函数,用于动态识别控件类型和做控件的类型转换。