UIControl.h 7.3 KB

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