ControlFactory.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <map>
  3. namespace DuiLib
  4. {
  5. typedef CControlUI* (*CreateClass)();
  6. typedef std::map<CDuiString, CreateClass> MAP_DUI_CTRATECLASS;
  7. class UILIB_API CControlFactory
  8. {
  9. public:
  10. CControlUI* CreateControl(CDuiString strClassName);
  11. void RegistControl(CDuiString strClassName, CreateClass pFunc);
  12. static CControlFactory* GetInstance();
  13. void Release();
  14. private:
  15. CControlFactory();
  16. virtual ~CControlFactory();
  17. private:
  18. MAP_DUI_CTRATECLASS m_mapControl;
  19. };
  20. #define DECLARE_DUICONTROL(class_name)\
  21. public:\
  22. static CControlUI* CreateControl();
  23. #define IMPLEMENT_DUICONTROL(class_name)\
  24. CControlUI* class_name::CreateControl()\
  25. {\
  26. return new class_name;\
  27. }
  28. #define REGIST_DUICONTROL(class_name)\
  29. CControlFactory::GetInstance()->RegistControl(_T(#class_name), (CreateClass)class_name::CreateControl);
  30. #define INNER_REGISTER_DUICONTROL(class_name)\
  31. RegistControl(_T(#class_name), (CreateClass)class_name::CreateControl);
  32. #define INNER_REGISTER_DUICONTROL_EX(str_class_name,class_type)\
  33. {\
  34. CDuiString sRegClassName;\
  35. sRegClassName.Format(_T("C%sUI"), str_class_name); \
  36. RegistControl(sRegClassName, (CreateClass)class_type::CreateControl);\
  37. }
  38. }