DUILib 界面库的使用
注册控件
- 控件命名方式
以 CxxxxUI 格式命名控件
原因:在 CDlgBuilder 中解析 xml 创建控件时代码如下
CDuiString strClass;
strClass.Format(_T("C%sUI"), pstrClass);
pControl = dynamic_cast<CControlUI*>(CControlFactory::GetInstance()->CreateControl(strClass));
另外控件需要实现 CreateControl 函数 可以在头文件中使用 DECLARE_DUICONTROL(CxxxxUI)
在 CPP 中使用 IMPLEMENT_DUICONTROL(CxxxxUI)
下面为两个宏定义的实现
#define DECLARE_DUICONTROL(class_name)\
public:\
static CControlUI* CreateControl();
#define IMPLEMENT_DUICONTROL(class_name)\
CControlUI* class_name::CreateControl()\
{ return new class_name; }
- xml 反射控件
在 CControlFactory 类构造函数中注册
形式为INNER_REGISTER_DUICONTROL(CxxxxUI);
或者在其他地方REGIST_DUICONTROL(CxxxxUI)
下面为两个宏的定义
#define REGIST_DUICONTROL(class_name)\
CControlFactory::GetInstance()->RegistControl(_T(#class_name), (CreateClass)class_name::CreateControl);
#define INNER_REGISTER_DUICONTROL(class_name)\
RegistControl(_T(#class_name), (CreateClass)class_name::CreateControl);
此时就可以在 xml 中引用该控件
- xml 反射控件属性
在控件类重写 SetAttribute 函数
if( node.HasAttributes() ) {
TCHAR szValue[500] = { 0 };
SIZE_T cchLen = lengthof(szValue) - 1;
// Set ordinary attributes
int nAttributes = node.GetAttributeCount();
for( int i = 0; i < nAttributes; i++ ) {
pControl->SetAttribute(node.GetAttributeName(i), node.GetAttributeValue(i));
}
}
- 在 UIDefine.h 中 注册控件名称的宏定义
如:#define DUI_CTR_HORIZONTALLAYOUT (_T("HorizontalLayout"))
- 在 UILib.h 中 添加控件的头文件
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于