UIDefine.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #pragma once
  2. //////////////BEGIN消息映射宏定义////////////////////////////////////////////////////
  3. ///
  4. namespace DuiLib
  5. {
  6. #define MAX_FONT_ID 30000
  7. #define LAYEREDUPDATE_TIMERID 0x2000
  8. enum DuiSig
  9. {
  10. DuiSig_end = 0, // [marks end of message map]
  11. DuiSig_lwl, // LRESULT (WPARAM, LPARAM)
  12. DuiSig_vn, // void (TNotifyUI)
  13. };
  14. class CControlUI;
  15. // Structure for notifications to the outside world
  16. typedef struct tagTNotifyUI
  17. {
  18. CDuiString sType;
  19. CDuiString sVirtualWnd;
  20. CControlUI* pSender;
  21. DWORD dwTimestamp;
  22. POINT ptMouse;
  23. WPARAM wParam;
  24. LPARAM lParam;
  25. } TNotifyUI;
  26. class CNotifyPump;
  27. typedef void (CNotifyPump::*DUI_PMSG)(TNotifyUI& msg); //指针类型
  28. union DuiMessageMapFunctions
  29. {
  30. DUI_PMSG pfn; // generic member function pointer
  31. LRESULT (CNotifyPump::*pfn_Notify_lwl)(WPARAM, LPARAM);
  32. void (CNotifyPump::*pfn_Notify_vn)(TNotifyUI&);
  33. };
  34. //定义所有消息类型
  35. //////////////////////////////////////////////////////////////////////////
  36. #define DUI_MSGTYPE_MENU (_T("menu"))
  37. #define DUI_MSGTYPE_LINK (_T("link"))
  38. #define DUI_MSGTYPE_TIMER (_T("timer"))
  39. #define DUI_MSGTYPE_CLICK (_T("click"))
  40. #define DUI_MSGTYPE_RETURN (_T("return"))
  41. #define DUI_MSGTYPE_SCROLL (_T("scroll"))
  42. #define DUI_MSGTYPE_DROPDOWN (_T("dropdown"))
  43. #define DUI_MSGTYPE_SETFOCUS (_T("setfocus"))
  44. #define DUI_MSGTYPE_KILLFOCUS (_T("killfocus"))
  45. #define DUI_MSGTYPE_ITEMCLICK (_T("itemclick"))
  46. #define DUI_MSGTYPE_TABSELECT (_T("tabselect"))
  47. #define DUI_MSGTYPE_ITEMSELECT (_T("itemselect"))
  48. #define DUI_MSGTYPE_ITEMEXPAND (_T("itemexpand"))
  49. #define DUI_MSGTYPE_WINDOWINIT (_T("windowinit"))
  50. #define DUI_MSGTYPE_BUTTONDOWN (_T("buttondown"))
  51. #define DUI_MSGTYPE_MOUSEENTER (_T("mouseenter"))
  52. #define DUI_MSGTYPE_MOUSELEAVE (_T("mouseleave"))
  53. #define DUI_MSGTYPE_TEXTCHANGED (_T("textchanged"))
  54. #define DUI_MSGTYPE_HEADERCLICK (_T("headerclick"))
  55. #define DUI_MSGTYPE_ITEMDBCLICK (_T("itemdbclick"))
  56. #define DUI_MSGTYPE_SHOWACTIVEX (_T("showactivex"))
  57. #define DUI_MSGTYPE_ITEMCOLLAPSE (_T("itemcollapse"))
  58. #define DUI_MSGTYPE_ITEMACTIVATE (_T("itemactivate"))
  59. #define DUI_MSGTYPE_VALUECHANGED (_T("valuechanged"))
  60. #define DUI_MSGTYPE_SELECTCHANGED (_T("selectchanged"))
  61. //////////////////////////////////////////////////////////////////////////
  62. struct DUI_MSGMAP_ENTRY;
  63. struct DUI_MSGMAP
  64. {
  65. #ifndef UILIB_STATIC
  66. const DUI_MSGMAP* (PASCAL* pfnGetBaseMap)();
  67. #else
  68. const DUI_MSGMAP* pBaseMap;
  69. #endif
  70. const DUI_MSGMAP_ENTRY* lpEntries;
  71. };
  72. //结构定义
  73. struct DUI_MSGMAP_ENTRY //定义一个结构体,来存放消息信息
  74. {
  75. CDuiString sMsgType; // DUI消息类型
  76. CDuiString sCtrlName; // 控件名称
  77. UINT nSig; // 标记函数指针类型
  78. DUI_PMSG pfn; // 指向函数的指针
  79. };
  80. //定义
  81. #ifndef UILIB_STATIC
  82. #define DUI_DECLARE_MESSAGE_MAP() \
  83. private: \
  84. static const DUI_MSGMAP_ENTRY _messageEntries[]; \
  85. protected: \
  86. static const DUI_MSGMAP messageMap; \
  87. static const DUI_MSGMAP* PASCAL _GetBaseMessageMap(); \
  88. virtual const DUI_MSGMAP* GetMessageMap() const; \
  89. #else
  90. #define DUI_DECLARE_MESSAGE_MAP() \
  91. private: \
  92. static const DUI_MSGMAP_ENTRY _messageEntries[]; \
  93. protected: \
  94. static const DUI_MSGMAP messageMap; \
  95. virtual const DUI_MSGMAP* GetMessageMap() const; \
  96. #endif
  97. //基类声明开始
  98. #ifndef UILIB_STATIC
  99. #define DUI_BASE_BEGIN_MESSAGE_MAP(theClass) \
  100. const DUI_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
  101. { return NULL; } \
  102. const DUI_MSGMAP* theClass::GetMessageMap() const \
  103. { return &theClass::messageMap; } \
  104. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  105. { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] };\
  106. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  107. { \
  108. #else
  109. #define DUI_BASE_BEGIN_MESSAGE_MAP(theClass) \
  110. const DUI_MSGMAP* theClass::GetMessageMap() const \
  111. { return &theClass::messageMap; } \
  112. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  113. { NULL, &theClass::_messageEntries[0] }; \
  114. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  115. { \
  116. #endif
  117. //子类声明开始
  118. #ifndef UILIB_STATIC
  119. #define DUI_BEGIN_MESSAGE_MAP(theClass, baseClass) \
  120. const DUI_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
  121. { return &baseClass::messageMap; } \
  122. const DUI_MSGMAP* theClass::GetMessageMap() const \
  123. { return &theClass::messageMap; } \
  124. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  125. { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
  126. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  127. { \
  128. #else
  129. #define DUI_BEGIN_MESSAGE_MAP(theClass, baseClass) \
  130. const DUI_MSGMAP* theClass::GetMessageMap() const \
  131. { return &theClass::messageMap; } \
  132. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  133. { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
  134. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  135. { \
  136. #endif
  137. //声明结束
  138. #define DUI_END_MESSAGE_MAP() \
  139. { _T(""), _T(""), DuiSig_end, (DUI_PMSG)0 } \
  140. }; \
  141. //定义消息类型--执行函数宏
  142. #define DUI_ON_MSGTYPE(msgtype, memberFxn) \
  143. { msgtype, _T(""), DuiSig_vn, (DUI_PMSG)&memberFxn}, \
  144. //定义消息类型--控件名称--执行函数宏
  145. #define DUI_ON_MSGTYPE_CTRNAME(msgtype,ctrname,memberFxn) \
  146. { msgtype, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \
  147. //定义click消息的控件名称--执行函数宏
  148. #define DUI_ON_CLICK_CTRNAME(ctrname,memberFxn) \
  149. { DUI_MSGTYPE_CLICK, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \
  150. //定义selectchanged消息的控件名称--执行函数宏
  151. #define DUI_ON_SELECTCHANGED_CTRNAME(ctrname,memberFxn) \
  152. { DUI_MSGTYPE_SELECTCHANGED,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
  153. //定义killfocus消息的控件名称--执行函数宏
  154. #define DUI_ON_KILLFOCUS_CTRNAME(ctrname,memberFxn) \
  155. { DUI_MSGTYPE_KILLFOCUS,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
  156. //定义menu消息的控件名称--执行函数宏
  157. #define DUI_ON_MENU_CTRNAME(ctrname,memberFxn) \
  158. { DUI_MSGTYPE_MENU,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
  159. //定义与控件名称无关的消息宏
  160. //定义timer消息--执行函数宏
  161. #define DUI_ON_TIMER() \
  162. { DUI_MSGTYPE_TIMER, _T(""), DuiSig_vn,(DUI_PMSG)&OnTimer }, \
  163. ///
  164. //////////////END消息映射宏定义////////////////////////////////////////////////////
  165. //////////////BEGIN控件名称宏定义//////////////////////////////////////////////////
  166. ///
  167. #define DUI_CTR_EDIT (_T("Edit"))
  168. #define DUI_CTR_LIST (_T("List"))
  169. #define DUI_CTR_TEXT (_T("Text"))
  170. #define DUI_CTR_COMBO (_T("Combo"))
  171. #define DUI_CTR_LABEL (_T("Label"))
  172. #define DUI_CTR_FLASH (_T("Flash"))
  173. #define DUI_CTR_BUTTON (_T("Button"))
  174. #define DUI_CTR_OPTION (_T("Option"))
  175. #define DUI_CTR_SLIDER (_T("Slider"))
  176. #define DUI_CTR_CONTROL (_T("Control"))
  177. #define DUI_CTR_ACTIVEX (_T("ActiveX"))
  178. #define DUI_CTR_GIFANIM (_T("GifAnim"))
  179. #define DUI_CTR_LISTITEM (_T("ListItem"))
  180. #define DUI_CTR_PROGRESS (_T("Progress"))
  181. #define DUI_CTR_RICHEDIT (_T("RichEdit"))
  182. #define DUI_CTR_CHECKBOX (_T("CheckBox"))
  183. #define DUI_CTR_COMBOBOX (_T("ComboBox"))
  184. #define DUI_CTR_DATETIME (_T("DateTime"))
  185. #define DUI_CTR_TREEVIEW (_T("TreeView"))
  186. #define DUI_CTR_TREENODE (_T("TreeNode"))
  187. #define DUI_CTR_CONTAINER (_T("Container"))
  188. #define DUI_CTR_TABLAYOUT (_T("TabLayout"))
  189. #define DUI_CTR_SCROLLBAR (_T("ScrollBar"))
  190. #define DUI_CTR_LISTHEADER (_T("ListHeader"))
  191. #define DUI_CTR_TILELAYOUT (_T("TileLayout"))
  192. #define DUI_CTR_WEBBROWSER (_T("WebBrowser"))
  193. #define DUI_CTR_CHILDLAYOUT (_T("ChildLayout"))
  194. #define DUI_CTR_LISTELEMENT (_T("ListElement"))
  195. #define DUI_CTR_DIALOGLAYOUT (_T("DialogLayout"))
  196. #define DUI_CTR_VERTICALLAYOUT (_T("VerticalLayout"))
  197. #define DUI_CTR_LISTHEADERITEM (_T("ListHeaderItem"))
  198. #define DUI_CTR_LISTTEXTELEMENT (_T("ListTextElement"))
  199. #define DUI_CTR_HORIZONTALLAYOUT (_T("HorizontalLayout"))
  200. #define DUI_CTR_LISTLABELELEMENT (_T("ListLabelElement"))
  201. #define DUI_CTR_LISTCONTAINERELEMENT (_T("ListContainerElement"))
  202. ///
  203. //////////////END控件名称宏定义//////////////////////////////////////////////////
  204. }// namespace DuiLib