Duilib自定义控件

1.继承基础控件

.h

namespace DuiLib
{
	class UILIB_API CListTableUI : public CListUI
	{
		DECLARE_DUICONTROL(CListTableUI)//使用方法2时才需要该行
	public:
		const static LPCTSTR ClassName;
		CListTableUI();
		LPCTSTR GetClass() const;

		void DoEvent(TEventUI& event);
	};
}

.cpp

namespace DuiLib
{
	IMPLEMENT_DUICONTROL(CListTableUI)//使用方法2时才需要该行

	const LPCTSTR CListTableUI::ClassName = _T("CListTableUI");
	CListTableUI::CListTableUI()
	{
	}

	LPCTSTR CListTableUI::GetClass() const
	{
		return _T("CListTableUI");
	}

	void CListTableUI::DoEvent(TEventUI& event)
	{
	}
}

2.方法1:在使用的对话框中创建该控件

2.1在XML中使用

<?xml version="1.0" encoding="utf-8"?>
<Window>
  <VerticalLayout">
    <CListTableUI />
  </VerticalLayout>
</Window>

2.2生成该控件
.h

class MyUI : public DuiLib::WindowImplBase
{
public:
	MyUI() {}
	~MyUI() {}
	virtual LPCTSTR GetWindowClassName() const override { return L"MyUI"; }
	virtual DuiLib::CDuiString GetSkinFile() override { return L"MyUI.xml"; }
	virtual DuiLib::CControlUI* CreateControl(LPCTSTR pstrClass) override;

.cpp

DuiLib::CControlUI* MyUI::CreateControl(LPCTSTR pstrClass)
{
	//创建自定义控件,否则会报错提示“未知控件”
	if (_tcscmp(pstrClass, CListItem::ClassName) == 0)
		return new CListItem;
	return WindowImplBase::CreateControl(pstrClass);
}

3.方法2:在duilib源码ControlFactory.cpp中添加代码,适合自定义的标准控件

注意1:这里不能使用CListTableUI,要使用ListTable,因为在 CDialogBuilder::_Parse 解析CML时,会自动添加C*UI
注意2:需要在.h文件和.cpp文件中分别添加DECLARE_DUICONTROL(CListTableUI)与IMPLEMENT_DUICONTROL(CListTableUI)

CDuiString strClass;
strClass.Format(_T("C%sUI"), pstrClass);
pControl = dynamic_cast<CControlUI*>(CControlFactory::GetInstance()->CreateControl(strClass));

XML

<?xml version="1.0" encoding="utf-8"?>
<Window>
  <VerticalLayout">
    <ListTable />
  </VerticalLayout>
</Window>

添加的代码

CControlFactory::CControlFactory()
	{
		'''
		
		INNER_REGISTER_DUICONTROL(CListItem);
	}

参考文章:https://blog.csdn.net/zhuhongshu/article/details/45362751

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值