UIControl.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #ifndef __UICONTROL_H__
  2. #define __UICONTROL_H__
  3. #pragma once
  4. namespace DuiLib {
  5. /////////////////////////////////////////////////////////////////////////////////////
  6. //
  7. typedef CControlUI* (CALLBACK* FINDCONTROLPROC)(CControlUI*, LPVOID);
  8. class UILIB_API CControlUI
  9. {
  10. public:
  11. CControlUI();
  12. virtual ~CControlUI();
  13. public:
  14. virtual CDuiString GetName() const;
  15. virtual void SetName(LPCTSTR pstrName);
  16. virtual LPCTSTR GetClass() const;
  17. virtual LPVOID GetInterface(LPCTSTR pstrName);
  18. virtual UINT GetControlFlags() const;
  19. virtual HWND GetNativeWindow() const;
  20. virtual bool Activate();
  21. virtual CPaintManagerUI* GetManager() const;
  22. virtual void SetManager(CPaintManagerUI* pManager, CControlUI* pParent, bool bInit = true);
  23. virtual CControlUI* GetParent() const;
  24. // 文本相关
  25. virtual CDuiString GetText() const;
  26. virtual void SetText(LPCTSTR pstrText);
  27. virtual void SetText (LPCSTR pstrText);
  28. virtual void SetTextInt(int text);
  29. virtual void SetTextFloat(int text,int decimal = 2);
  30. // 图形相关
  31. DWORD GetBkColor() const;
  32. void SetBkColor(DWORD dwBackColor);
  33. DWORD GetBkColor2() const;
  34. void SetBkColor2(DWORD dwBackColor);
  35. DWORD GetBkColor3() const;
  36. void SetBkColor3(DWORD dwBackColor);
  37. LPCTSTR GetBkImage();
  38. void SetBkImage(LPCTSTR pStrImage);
  39. DWORD GetFocusBorderColor() const;
  40. void SetFocusBorderColor(DWORD dwBorderColor);
  41. bool IsColorHSL() const;
  42. void SetColorHSL(bool bColorHSL);
  43. SIZE GetBorderRound() const;
  44. void SetBorderRound(SIZE cxyRound);
  45. bool DrawImage(HDC hDC, TDrawInfo& drawInfo);
  46. //modify by Hong;
  47. void SetBkFillMode(LPCTSTR pstrMode);
  48. //边框相关
  49. DWORD GetBorderColor() const;
  50. void SetBorderColor(DWORD dwBorderColor);
  51. RECT GetBorderSize() const;
  52. void SetBorderSize(RECT rc);
  53. void SetBorderSize(int iSize);
  54. int GetBorderStyle() const;
  55. void SetBorderStyle(int nStyle);
  56. // 位置相关
  57. virtual const RECT& GetPos() const;
  58. virtual RECT GetRelativePos() const; // 相对(父控件)位置
  59. virtual RECT GetClientPos() const; // 客户区域(除去scrollbar和inset)
  60. // 只有控件为float的时候,外部调用SetPos和Move才是有效的,位置参数是相对父控件的位置
  61. virtual void SetPos(RECT rc, bool bNeedInvalidate = true);
  62. virtual void Move(SIZE szOffset, bool bNeedInvalidate = true);
  63. virtual int GetWidth() const;
  64. virtual int GetHeight() const;
  65. virtual int GetX() const;
  66. virtual int GetY() const;
  67. virtual RECT GetPadding() const;
  68. virtual void SetPadding(RECT rcPadding); // 设置外边距,由上层窗口绘制
  69. virtual SIZE GetFixedXY() const; // 实际大小位置使用GetPos获取,这里得到的是预设的参考值
  70. virtual void SetFixedXY(SIZE szXY); // 仅float为true时有效
  71. virtual int GetFixedWidth() const; // 实际大小位置使用GetPos获取,这里得到的是预设的参考值
  72. virtual void SetFixedWidth(int cx); // 预设的参考值
  73. virtual int GetFixedHeight() const; // 实际大小位置使用GetPos获取,这里得到的是预设的参考值
  74. virtual void SetFixedHeight(int cy); // 预设的参考值
  75. virtual int GetMinWidth() const;
  76. virtual void SetMinWidth(int cx);
  77. virtual int GetMaxWidth() const;
  78. virtual void SetMaxWidth(int cx);
  79. virtual int GetMinHeight() const;
  80. virtual void SetMinHeight(int cy);
  81. virtual int GetMaxHeight() const;
  82. virtual void SetMaxHeight(int cy);
  83. virtual TPercentInfo GetFloatPercent() const;
  84. virtual void SetFloatPercent(TPercentInfo piFloatPercent);
  85. //add by hong;
  86. virtual void SetFixedSize (int cx,int cy);
  87. virtual BOOL PostMessageToPaintWindow (UINT msg, WPARAM wparam, LPARAM lparam);
  88. // 鼠标提示
  89. virtual CDuiString GetToolTip() const;
  90. virtual void SetToolTip(LPCTSTR pstrText);
  91. virtual void SetToolTipWidth(int nWidth);
  92. virtual int GetToolTipWidth(void); // 多行ToolTip单行最长宽度
  93. // 快捷键
  94. virtual TCHAR GetShortcut() const;
  95. virtual void SetShortcut(TCHAR ch);
  96. // 菜单
  97. virtual bool IsContextMenuUsed() const;
  98. virtual void SetContextMenuUsed(bool bMenuUsed);
  99. // 用户属性
  100. virtual const CDuiString& GetUserData(); // 辅助函数,供用户使用
  101. virtual void SetUserData(LPCTSTR pstrText); // 辅助函数,供用户使用
  102. virtual UINT_PTR GetTag() const; // 辅助函数,供用户使用
  103. virtual void SetTag(UINT_PTR pTag); // 辅助函数,供用户使用
  104. // 一些重要的属性
  105. virtual bool IsVisible() const;
  106. virtual void SetVisible(bool bVisible = true);
  107. virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写此函数
  108. virtual bool IsEnabled() const;
  109. virtual void SetEnabled(bool bEnable = true);
  110. virtual bool IsMouseEnabled() const;
  111. virtual void SetMouseEnabled(bool bEnable = true);
  112. virtual bool IsKeyboardEnabled() const;
  113. virtual void SetKeyboardEnabled(bool bEnable = true);
  114. virtual bool IsFocused() const;
  115. virtual void SetFocus();
  116. virtual bool IsFloat() const;
  117. virtual void SetFloat(bool bFloat = true);
  118. // 自定义(未处理的)属性
  119. void AddCustomAttribute(LPCTSTR pstrName, LPCTSTR pstrAttr);
  120. LPCTSTR GetCustomAttribute(LPCTSTR pstrName) const;
  121. bool RemoveCustomAttribute(LPCTSTR pstrName);
  122. void RemoveAllCustomAttribute();
  123. virtual CControlUI* FindControl(FINDCONTROLPROC Proc, LPVOID pData, UINT uFlags);
  124. CControlUI* FindSubControl (LPCTSTR pstrSubControlName);
  125. template<class ControlTy_ = CControlUI>
  126. ControlTy_* const FindSubControlEx (LPCTSTR lpstrName)
  127. {
  128. auto pControl = FindSubControl (lpstrName);
  129. return reinterpret_cast<ControlTy_*>(pControl);
  130. };
  131. #define DUI_SUBOBJ(obj_name,obj_parent) auto obj_name = obj_parent->FindSubControl(L#obj_name)
  132. #define DUI_SUBOBJ_EXT(obj_name,obj_type,obj_parent) auto obj_name = obj_parent->FindSubControlEx<obj_type>(L#obj_name)
  133. void Invalidate();
  134. bool IsUpdateNeeded() const;
  135. void NeedUpdate();
  136. void NeedParentUpdate();
  137. DWORD GetAdjustColor(DWORD dwColor);
  138. virtual void Init();
  139. virtual void DoInit();
  140. virtual void Event(TEventUI& event);
  141. virtual void DoEvent(TEventUI& event);
  142. virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
  143. CControlUI* ApplyAttributeList(LPCTSTR pstrList);
  144. void SetColor_Normal();
  145. void SetColor_Prewarning();
  146. void SetColor_Warning();
  147. void SetColor_Disable();
  148. virtual SIZE EstimateSize(SIZE szAvailable);
  149. virtual void Paint(HDC hDC, const RECT& rcPaint);
  150. virtual void DoPaint(HDC hDC, const RECT& rcPaint);
  151. virtual void PaintBkColor(HDC hDC);
  152. virtual void PaintBkImage(HDC hDC);
  153. virtual void PaintStatusImage(HDC hDC);
  154. virtual void PaintText(HDC hDC);
  155. virtual void PaintBorder(HDC hDC);
  156. virtual void DoPostPaint(HDC hDC, const RECT& rcPaint);
  157. //虚拟窗口参数
  158. void SetVirtualWnd(LPCTSTR pstrValue);
  159. CDuiString GetVirtualWnd() const;
  160. public:
  161. CEventSource OnInit;
  162. CEventSource OnDestroy;
  163. CEventSource OnSize;
  164. CEventSource OnEvent;
  165. CEventSource OnNotify;
  166. CEventSource OnPaint;
  167. CEventSource OnPostPaint;
  168. protected:
  169. CPaintManagerUI* m_pManager;
  170. CControlUI* m_pParent;
  171. CDuiString m_sVirtualWnd;
  172. CDuiString m_sName;
  173. bool m_bUpdateNeeded;
  174. bool m_bMenuUsed;
  175. RECT m_rcItem;
  176. RECT m_rcPadding;
  177. SIZE m_cXY;
  178. SIZE m_cxyFixed;
  179. SIZE m_cxyMin;
  180. SIZE m_cxyMax;
  181. bool m_bVisible;
  182. bool m_bInternVisible;
  183. bool m_bEnabled;
  184. bool m_bMouseEnabled;
  185. bool m_bKeyboardEnabled ;
  186. bool m_bFocused;
  187. bool m_bFloat;
  188. TPercentInfo m_piFloatPercent;
  189. bool m_bSetPos; // 防止SetPos循环调用
  190. CDuiString m_sText;
  191. CDuiString m_sToolTip;
  192. TCHAR m_chShortcut;
  193. CDuiString m_sUserData;
  194. UINT_PTR m_pTag;
  195. DWORD m_dwBackColor;
  196. DWORD m_dwBackColor2;
  197. DWORD m_dwBackColor3;
  198. TDrawInfo m_diBk;
  199. TDrawInfo m_diFore;
  200. DWORD m_dwBorderColor;
  201. DWORD m_dwFocusBorderColor;
  202. bool m_bColorHSL;
  203. int m_nBorderStyle;
  204. int m_nTooltipWidth;
  205. SIZE m_cxyBorderRound;
  206. RECT m_rcPaint;
  207. RECT m_rcBorderSize;
  208. CStdStringPtrMap m_mCustomAttrHash;
  209. //modfiy by hong,Gradient fill mode;
  210. enum GRADIENT_FILL_MODE:DWORD
  211. {
  212. HOZ = GRADIENT_FILL_RECT_H,
  213. VET = GRADIENT_FILL_RECT_V
  214. }m_dwFillMode;
  215. };
  216. } // namespace DuiLib
  217. #endif // __UICONTROL_H__