UIDefine.h 11 KB

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