UIDefine.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. #pragma once
  2. namespace DuiLib
  3. {
  4. #define MAX_FONT_ID 30000
  5. #define CARET_TIMERID 0x1999
  6. // 列表类型
  7. enum ListType
  8. {
  9. LT_LIST = 0,
  10. LT_COMBO,
  11. LT_TREE,
  12. LT_MENU,
  13. };
  14. // 鼠标光标定义
  15. #define DUI_ARROW 32512
  16. #define DUI_IBEAM 32513
  17. #define DUI_WAIT 32514
  18. #define DUI_CROSS 32515
  19. #define DUI_UPARROW 32516
  20. #define DUI_SIZE 32640
  21. #define DUI_ICON 32641
  22. #define DUI_SIZENWSE 32642
  23. #define DUI_SIZENESW 32643
  24. #define DUI_SIZEWE 32644
  25. #define DUI_SIZENS 32645
  26. #define DUI_SIZEALL 32646
  27. #define DUI_NO 32648
  28. #define DUI_HAND 32649
  29. // 消息类型
  30. enum DuiSig
  31. {
  32. DuiSig_end = 0, // [marks end of message map]
  33. DuiSig_lwl, // LRESULT (WPARAM, LPARAM)
  34. DuiSig_vn, // void (TNotifyUI)
  35. };
  36. // 核心控件
  37. class CControlUI;
  38. // Structure for notifications to the outside world
  39. typedef struct tagTNotifyUI
  40. {
  41. CDuiString sType;
  42. CDuiString sVirtualWnd;
  43. CControlUI* pSender;
  44. DWORD dwTimestamp;
  45. POINT ptMouse;
  46. WPARAM wParam;
  47. LPARAM lParam;
  48. } TNotifyUI;
  49. class CNotifyPump;
  50. typedef void (CNotifyPump::*DUI_PMSG)(TNotifyUI& msg); //指针类型
  51. union DuiMessageMapFunctions
  52. {
  53. DUI_PMSG pfn; // generic member function pointer
  54. LRESULT(CNotifyPump::*pfn_Notify_lwl)(WPARAM, LPARAM);
  55. void (CNotifyPump::*pfn_Notify_vn)(TNotifyUI&);
  56. };
  57. //定义所有消息类型
  58. //////////////////////////////////////////////////////////////////////////
  59. #define DUI_MSGTYPE_MENU (_T("menu"))
  60. #define DUI_MSGTYPE_LINK (_T("link"))
  61. #define DUI_MSGTYPE_TIMER (_T("timer"))
  62. #define DUI_MSGTYPE_CLICK (_T("click"))
  63. #define DUI_MSGTYPE_DBCLICK (_T("dbclick"))
  64. #define DUI_MSGTYPE_RETURN (_T("return"))
  65. #define DUI_MSGTYPE_SCROLL (_T("scroll"))
  66. #define DUI_MSGTYPE_PREDROPDOWN (_T("predropdown"))
  67. #define DUI_MSGTYPE_DROPDOWN (_T("dropdown"))
  68. #define DUI_MSGTYPE_SETFOCUS (_T("setfocus"))
  69. #define DUI_MSGTYPE_KILLFOCUS (_T("killfocus"))
  70. #define DUI_MSGTYPE_ITEMCLICK (_T("itemclick"))
  71. #define DUI_MSGTYPE_ITEMRCLICK (_T("itemrclick"))
  72. #define DUI_MSGTYPE_TABSELECT (_T("tabselect"))
  73. #define DUI_MSGTYPE_ITEMSELECT (_T("itemselect"))
  74. #define DUI_MSGTYPE_ITEMEXPAND (_T("itemexpand"))
  75. #define DUI_MSGTYPE_WINDOWINIT (_T("windowinit"))
  76. #define DUI_MSGTYPE_WINDOWSIZE (_T("windowsize"))
  77. #define DUI_MSGTYPE_BUTTONDOWN (_T("buttondown"))
  78. #define DUI_MSGTYPE_MOUSEENTER (_T("mouseenter"))
  79. #define DUI_MSGTYPE_MOUSELEAVE (_T("mouseleave"))
  80. #define DUI_MSGTYPE_TEXTCHANGED (_T("textchanged"))
  81. #define DUI_MSGTYPE_HEADERCLICK (_T("headerclick"))
  82. #define DUI_MSGTYPE_ITEMDBCLICK (_T("itemdbclick"))
  83. #define DUI_MSGTYPE_SHOWACTIVEX (_T("showactivex"))
  84. #define DUI_MSGTYPE_ITEMCOLLAPSE (_T("itemcollapse"))
  85. #define DUI_MSGTYPE_ITEMACTIVATE (_T("itemactivate"))
  86. #define DUI_MSGTYPE_VALUECHANGED (_T("valuechanged"))
  87. #define DUI_MSGTYPE_VALUECHANGED_MOVE (_T("movevaluechanged"))
  88. #define DUI_MSGTYPE_SELECTCHANGED (_T("selectchanged"))
  89. #define DUI_MSGTYPE_UNSELECTED (_T("unselected"))
  90. #define DUI_MSGTYPE_TREEITEMDBCLICK (_T("treeitemdbclick"))
  91. #define DUI_MSGTYPE_CHECKCLICK (_T("checkclick"))
  92. #define DUI_MSGTYPE_TEXTROLLEND (_T("textrollend"))
  93. #define DUI_MSGTYPE_COLORCHANGED (_T("colorchanged"))
  94. #define DUI_MSGTYPE_LISTITEMSELECT (_T("listitemselect"))
  95. #define DUI_MSGTYPE_LISTITEMCHECKED (_T("listitemchecked"))
  96. #define DUI_MSGTYPE_COMBOITEMSELECT (_T("comboitemselect"))
  97. #define DUI_MSGTYPE_LISTHEADERCLICK (_T("listheaderclick"))
  98. #define DUI_MSGTYPE_LISTHEADITEMCHECKED (_T("listheaditemchecked"))
  99. #define DUI_MSGTYPE_LISTPAGECHANGED (_T("listpagechanged"))
  100. #define DUI_MSGTYPE_PAGECHANED (_T("page_selected_changed"))
  101. //////////////////////////////////////////////////////////////////////////
  102. struct DUI_MSGMAP_ENTRY;
  103. struct DUI_MSGMAP
  104. {
  105. #ifndef UILIB_STATIC
  106. const DUI_MSGMAP* (PASCAL* pfnGetBaseMap)();
  107. #else
  108. const DUI_MSGMAP* pBaseMap;
  109. #endif
  110. const DUI_MSGMAP_ENTRY* lpEntries;
  111. };
  112. //结构定义
  113. struct DUI_MSGMAP_ENTRY //定义一个结构体,来存放消息信息
  114. {
  115. CDuiString sMsgType; // DUI消息类型
  116. CDuiString sCtrlName; // 控件名称
  117. UINT nSig; // 标记函数指针类型
  118. DUI_PMSG pfn; // 指向函数的指针
  119. };
  120. //定义
  121. #ifndef UILIB_STATIC
  122. #define DUI_DECLARE_MESSAGE_MAP() \
  123. private: \
  124. static const DUI_MSGMAP_ENTRY _messageEntries[]; \
  125. protected: \
  126. static const DUI_MSGMAP messageMap; \
  127. static const DUI_MSGMAP* PASCAL _GetBaseMessageMap(); \
  128. virtual const DUI_MSGMAP* GetMessageMap() const; \
  129. #else
  130. #define DUI_DECLARE_MESSAGE_MAP() \
  131. private: \
  132. static const DUI_MSGMAP_ENTRY _messageEntries[]; \
  133. protected: \
  134. static const DUI_MSGMAP messageMap; \
  135. virtual const DUI_MSGMAP* GetMessageMap() const; \
  136. #endif
  137. //基类声明开始
  138. #ifndef UILIB_STATIC
  139. #define DUI_BASE_BEGIN_MESSAGE_MAP(theClass) \
  140. const DUI_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
  141. { return NULL; } \
  142. const DUI_MSGMAP* theClass::GetMessageMap() const \
  143. { return &theClass::messageMap; } \
  144. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  145. { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] };\
  146. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  147. { \
  148. #else
  149. #define DUI_BASE_BEGIN_MESSAGE_MAP(theClass) \
  150. const DUI_MSGMAP* theClass::GetMessageMap() const \
  151. { return &theClass::messageMap; } \
  152. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  153. { NULL, &theClass::_messageEntries[0] }; \
  154. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  155. { \
  156. #endif
  157. //子类声明开始
  158. #ifndef UILIB_STATIC
  159. #define DUI_BEGIN_MESSAGE_MAP(theClass, baseClass) \
  160. const DUI_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
  161. { return &baseClass::messageMap; } \
  162. const DUI_MSGMAP* theClass::GetMessageMap() const \
  163. { return &theClass::messageMap; } \
  164. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  165. { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
  166. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  167. { \
  168. #else
  169. #define DUI_BEGIN_MESSAGE_MAP(theClass, baseClass) \
  170. const DUI_MSGMAP* theClass::GetMessageMap() const \
  171. { return &theClass::messageMap; } \
  172. UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
  173. { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
  174. UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
  175. { \
  176. #endif
  177. //声明结束
  178. #define DUI_END_MESSAGE_MAP() \
  179. { _T(""), _T(""), DuiSig_end, (DUI_PMSG)0 } \
  180. }; \
  181. //定义消息类型--执行函数宏
  182. #define DUI_ON_MSGTYPE(msgtype, memberFxn) \
  183. { msgtype, _T(""), DuiSig_vn, (DUI_PMSG)&memberFxn}, \
  184. //定义消息类型--控件名称--执行函数宏
  185. #define DUI_ON_MSGTYPE_CTRNAME(msgtype,ctrname,memberFxn) \
  186. { msgtype, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \
  187. //定义click消息的控件名称--执行函数宏
  188. #define DUI_ON_CLICK_CTRNAME(ctrname,memberFxn) \
  189. { DUI_MSGTYPE_CLICK, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \
  190. //定义selectchanged消息的控件名称--执行函数宏
  191. #define DUI_ON_SELECTCHANGED_CTRNAME(ctrname,memberFxn) \
  192. { DUI_MSGTYPE_SELECTCHANGED,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
  193. //定义killfocus消息的控件名称--执行函数宏
  194. #define DUI_ON_KILLFOCUS_CTRNAME(ctrname,memberFxn) \
  195. { DUI_MSGTYPE_KILLFOCUS,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
  196. //定义menu消息的控件名称--执行函数宏
  197. #define DUI_ON_MENU_CTRNAME(ctrname,memberFxn) \
  198. { DUI_MSGTYPE_MENU,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
  199. //定义与控件名称无关的消息宏
  200. //定义timer消息--执行函数宏
  201. #define DUI_ON_TIMER() \
  202. { DUI_MSGTYPE_TIMER, _T(""), DuiSig_vn,(DUI_PMSG)&OnTimer }, \
  203. ///
  204. //////////////END消息映射宏定义////////////////////////////////////////////////////
  205. //////////////BEGIN控件名称宏定义//////////////////////////////////////////////////
  206. ///
  207. #define DUI_CTR_BOX (_T("Box")) //
  208. #define DUI_CTR_EDIT (_T("Edit"))
  209. #define DUI_CTR_LIST (_T("List"))
  210. #define DUI_CTR_TEXT (_T("Text"))
  211. #define DUI_CTR_HBOX (_T("HBox"))
  212. #define DUI_CTR_VBOX (_T("VBox"))
  213. #define DUI_CTR_RING (_T("Ring"))
  214. #define DUI_CTR_COMBO (_T("Combo"))
  215. #define DUI_CTR_LABEL (_T("Label"))
  216. #define DUI_CTR_FLASH (_T("Flash"))
  217. #define DUI_CTR_BUTTON (_T("Button"))
  218. #define DUI_CTR_OPTION (_T("Option"))
  219. #define DUI_CTR_SLIDER (_T("Slider"))
  220. #define DUI_CTR_TAB_BOX (_T("TabBox")) //
  221. #define DUI_CTR_CONTROL (_T("Control"))
  222. #define DUI_CTR_ACTIVEX (_T("ActiveX"))
  223. #define DUI_CTR_GIFANIM (_T("GifAnim"))
  224. #define DUI_CTR_TILE_BOX (_T("TileBox")) //
  225. #define DUI_CTR_LOADINGCIRCLE (_T("Loading")) //
  226. #define DUI_CTR_LISTITEM (_T("ListItem"))
  227. #define DUI_CTR_PROGRESS (_T("Progress"))
  228. #define DUI_CTR_RICHEDIT (_T("RichEdit"))
  229. #define DUI_CTR_CHECKBOX (_T("CheckBox"))
  230. #define DUI_CTR_COMBOBOX (_T("ComboBox"))
  231. #define DUI_CTR_DATETIME (_T("DateTime"))
  232. #define DUI_CTR_TREEVIEW (_T("TreeView"))
  233. #define DUI_CTR_TREENODE (_T("TreeNode"))
  234. #define DUI_CTR_CHILD_BOX (_T("ChildBox")) //
  235. #define DUI_CTR_CONTAINER (_T("Container"))
  236. #define DUI_CTR_TABLAYOUT (_T("TabLayout"))
  237. #define DUI_CTR_SCROLLBAR (_T("ScrollBar"))
  238. #define DUI_CTR_IPADDRESS (_T("IPAddress"))
  239. #define DUI_CTR_LISTHEADER (_T("ListHeader"))
  240. #define DUI_CTR_LISTFOOTER (_T("ListFooter"))
  241. #define DUI_CTR_TILELAYOUT (_T("TileLayout"))
  242. #define DUI_CTR_WEBBROWSER (_T("WebBrowser"))
  243. #define DUI_CTR_CHILDLAYOUT (_T("ChildLayout"))
  244. #define DUI_CTR_LISTELEMENT (_T("ListElement"))
  245. #define DUI_CTR_VERTICALLAYOUT (_T("VerticalLayout"))
  246. #define DUI_CTR_LISTHEADERITEM (_T("ListHeaderItem"))
  247. #define DUI_CTR_LISTTEXTELEMENT (_T("ListTextElement"))
  248. #define DUI_CTR_HORIZONTALLAYOUT (_T("HorizontalLayout"))
  249. #define DUI_CTR_LISTLABELELEMENT (_T("ListLabelElement"))
  250. #define DUI_CTR_ANIMATIONTABLAYOUT (_T("AnimationTabLayout"))
  251. #define DUI_CTR_LISTCONTAINERELEMENT (_T("ListContainerElement"))
  252. #define DUI_CTR_TEXTSCROLL (_T("TextScroll"))
  253. #define DUI_CTR_COLORPALETTE (_T("ColorPalette"))
  254. ///
  255. //////////////END控件名称宏定义//////////////////////////////////////////////////
  256. }// namespace DuiLib