| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #pragma once
- #include <map>
- namespace DuiLib
- {
- typedef CControlUI* (*CreateClass)();
- typedef std::map<CDuiString, CreateClass> MAP_DUI_CTRATECLASS;
- class UILIB_API CControlFactory
- {
- public:
- CControlUI* CreateControl(CDuiString strClassName);
- void RegistControl(CDuiString strClassName, CreateClass pFunc);
- static CControlFactory* GetInstance();
- void Release();
- private:
- CControlFactory();
- virtual ~CControlFactory();
- private:
- MAP_DUI_CTRATECLASS m_mapControl;
- };
- #define DECLARE_DUICONTROL(class_name)\
- public:\
- static CControlUI* CreateControl();
- #define IMPLEMENT_DUICONTROL(class_name)\
- CControlUI* class_name::CreateControl()\
- {\
- return new class_name;\
- }
- #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);
- #define INNER_REGISTER_DUICONTROL_EX(str_class_name,class_type)\
- {\
- CDuiString sRegClassName;\
- sRegClassName.Format(_T("C%sUI"), str_class_name); \
- RegistControl(sRegClassName, (CreateClass)class_type::CreateControl);\
- }
- }
|