XTPButton.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:15k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPButton.h : interface for the CXTPButton class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPBUTTON_H__)
  22. #define __XTPBUTTON_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPImageManager;
  28. class CXTPImageManagerIcon;
  29. class CXTPMarkupContext;
  30. class CXTPMarkupUIElement;
  31. class CXTPButtonTheme;
  32. class CXTPImageManagerIconHandle;
  33. #define CXTPButtonBase CButton
  34. enum XTPButtonTextImageRelation
  35. {
  36. xtpButtonOverlay,
  37. xtpButtonImageAboveText,
  38. xtpButtonTextAboveImage,
  39. xtpButtonImageBeforeText,
  40. xtpButtonTextBeforeImage
  41. };
  42. enum XTPPushButtonStyle
  43. {
  44. xtpButtonNormal,
  45. xtpButtonDropDown,
  46. xtpButtonDropDownRight,
  47. xtpButtonSplitDropDown
  48. };
  49. enum XTPButtonTheme
  50. {
  51. xtpButtonThemeStandard,
  52. xtpButtonThemeFlat,
  53. xtpButtonThemeUltraFlat,
  54. xtpButtonThemeOffice2000,
  55. xtpButtonThemeOfficeXP,
  56. xtpButtonThemeOffice2003,
  57. xtpButtonThemeOffice2007
  58. };
  59. enum XTPGroupBoxBorderStyle
  60. {
  61. xtpGroupBoxBorder,
  62. xtpGroupBoxSingleLine,
  63. xtpGroupBoxNone
  64. };
  65. class _XTP_EXT_CLASS CXTPButton : public CXTPButtonBase
  66. {
  67. DECLARE_DYNAMIC(CXTPButton)
  68. public:
  69. // ----------------------------------------
  70. // Summary:
  71. //     Constructs a CXTPButton object
  72. // ----------------------------------------
  73. CXTPButton();
  74. // -----------------------------------------------------------
  75. // Summary:
  76. //     Destroys a CXTPButton object, handles cleanup and
  77. //     deallocation
  78. // -----------------------------------------------------------
  79. virtual ~CXTPButton();
  80. public:
  81. BYTE GetButtonStyle() const;
  82. virtual BOOL IsPushed();
  83. virtual BOOL IsHighlighted();
  84. virtual BOOL GetChecked();
  85. void SetChecked(BOOL bChecked);
  86. BOOL GetFlatStyle() const;
  87. void SetFlatStyle(BOOL bFlatStyle = TRUE);
  88. BOOL GetUseVisualStyle() const;
  89. void SetUseVisualStyle(BOOL bUseVisualStyle = TRUE);
  90. long GetBorderGap() const;
  91. void SetBorderGap(int nBorderGap);
  92. XTPPushButtonStyle GetPushButtonStyle() const;
  93. void SetPushButtonStyle(XTPPushButtonStyle nPushButtonStyle);
  94. virtual int GetTextAlignment() const;
  95. void SetTextAlignment(DWORD dwAlignment);
  96. virtual int GetImageAlignment() const;
  97. void SetImageAlignment(DWORD dwAlignment);
  98. XTPButtonTextImageRelation GetTextImageRelation() const;
  99. void SetTextImageRelation(XTPButtonTextImageRelation realtion);
  100. long GetImageGap() const;
  101. void SetImageGap(int nImageGap);
  102. virtual CSize GetImageSize();
  103. CXTPImageManagerIcon* GetIcon() const;
  104. virtual void DrawImage(CDC* pDC, CRect rc);
  105. XTPGroupBoxBorderStyle GetBorderStyle() const;
  106. void SetBorderStyle(XTPGroupBoxBorderStyle style);
  107. BOOL GetShowFocus() const;
  108. void SetShowFocus(BOOL bShowFocus);
  109. void SetTheme(XTPButtonTheme nStyle);
  110. void RedrawButton();
  111. BOOL IsDropDownStyle() const;
  112. public:
  113. //-----------------------------------------------------------------------
  114. // Summary:
  115. //     This member function will set the normal and hot state icons for
  116. //     the push button.
  117. // Parameters:
  118. //     size           - CSize object that represents the size of the icon.
  119. //     hIcon          - Handle to the normal icon.
  120. //     hIconHandle    - Handle to the normal icon.
  121. //     hIconHot       - Handle to the hot icon.
  122. //     hIconHotHandle - Handle to the hot icon.
  123. //     nID            - Resource ID for the normal icon.
  124. //     nHotID         - Resource ID for the pressed icon.
  125. //     lpszID         - Resource string ID for the normal icon.
  126. //     lpszHotID      - Resource string ID for the hot icon.
  127. //     bRedraw        - Specifies whether the button is to be redrawn. A
  128. //                      nonzero value redraws the button. A zero value does
  129. //                      not redraw the button. The button is redrawn by default.
  130. // Returns:
  131. //     TRUE if successful, otherwise returns FALSE.
  132. //-----------------------------------------------------------------------
  133. virtual BOOL SetIcon(CSize size, HICON hIcon, HICON hIconHot = NULL, BOOL bRedraw = TRUE);
  134. virtual BOOL SetIcon(CSize size, UINT nID, UINT nHotID = 0, BOOL bRedraw = TRUE);                //<COMBINE CXTButton::SetIcon@CSize@HICON@HICON@BOOL>
  135. virtual BOOL SetIcon(CSize size, LPCTSTR lpszID, LPCTSTR lpszHotID = NULL, BOOL bRedraw = TRUE); //<COMBINE CXTButton::SetIcon@CSize@HICON@HICON@BOOL>
  136. virtual BOOL SetIcon(CSize size, const CXTPImageManagerIconHandle& hIconHandle, const CXTPImageManagerIconHandle& hIconHotHandle, BOOL bRedraw = TRUE); //<COMBINE CXTButton::SetIcon@CSize@HICON@HICON@BOOL>
  137. BOOL SetIcon(CSize size, CXTPImageManagerIcon* pIcon, BOOL bRedraw = TRUE);
  138. //-----------------------------------------------------------------------
  139. // Summary:
  140. //     This member function will set the bitmap associated with the
  141. //     button.
  142. // Parameters:
  143. //     size    - CSize object that represents the size of the bitmap.
  144. //     nID     - Resource ID for the bitmap.
  145. //     bRedraw - Specifies whether the button is to be redrawn. A nonzero
  146. //               value redraws the button. A zero value does not redraw
  147. //               the button. The button is redrawn by default.
  148. // Returns:
  149. //     TRUE if successful, otherwise returns FALSE.
  150. //-----------------------------------------------------------------------
  151. virtual BOOL SetBitmap(CSize size, UINT nID, BOOL bRedraw = TRUE);
  152. public:
  153. virtual CString GetButtonText();
  154. CSize GetGlyphSize(BOOL bCheckBox);
  155. BOOL IsPushButton() const;
  156. void EnableMarkup(BOOL bEnableMarkup = TRUE);
  157. virtual COLORREF GetButtonTextColor();
  158. virtual COLORREF GetButtonBackColor();
  159. CXTPMarkupContext* GetMarkupContext() const;
  160. CXTPMarkupUIElement* GetMarkupUIElement();
  161. protected:
  162. virtual void OnDropDown();
  163. virtual void OnDraw(CDC* pDC);
  164. virtual void InternalTextChanged();
  165. void DoDropDown();
  166. protected:
  167. //{{AFX_CODEJOCK_PRIVATE
  168. DECLARE_MESSAGE_MAP()
  169. //{{AFX_VIRTUAL(CXTPButton)
  170. virtual void DoDraw(CDC* pDC);
  171. virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  172. //}}AFX_VIRTUAL
  173. //{{AFX_MSG(CXTPButton)
  174. afx_msg LRESULT OnSetStyle(WPARAM wParam, LPARAM lParam);
  175. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  176. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  177. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  178. afx_msg void OnSetFocus(CWnd* pOldWnd);
  179. afx_msg void OnKillFocus(CWnd* pNewWnd);
  180. afx_msg void OnPaint();
  181. afx_msg LRESULT OnSetState(WPARAM wParam, LPARAM lParam);
  182. afx_msg void OnMouseLeave();
  183. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  184. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  185. afx_msg void OnInvalidate();
  186. afx_msg LRESULT OnDefaultAndInvalidate(WPARAM, LPARAM);
  187. afx_msg LRESULT OnUpdateUIState(WPARAM wParam, LPARAM lParam);
  188. afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam);
  189. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam);
  190. afx_msg void OnSysColorChange();
  191. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  192. afx_msg LRESULT OnGetDlgCode(WPARAM wParam, LPARAM lParam);
  193. //}}AFX_MSG
  194. //}}AFX_CODEJOCK_PRIVATE
  195. protected:
  196. BOOL m_bPushed;         // TRUE if button was pressed
  197. BOOL m_bHot;            // TRUE if mouse under button
  198. CXTPButtonTheme* m_pButtonTheme;
  199. BOOL m_bChecked;
  200. BOOL m_bFlatStyle;
  201. BOOL m_bUseVisualStyle;
  202. long m_nImageAlignment;
  203. long m_nBorderGap;
  204. long m_nPushButtonStyle;
  205. BOOL m_bEnableMarkup;
  206. long m_nImageGap;
  207. long m_nTextImageRelation;
  208. CXTPImageManagerIcon* m_pIcon;
  209. long m_nBorderStyle;
  210. BOOL m_bShowFocus;
  211. protected:
  212. CXTPMarkupContext* m_pMarkupContext;
  213. CXTPMarkupUIElement* m_pUIElement;
  214. };
  215. #include "Common/XTPWinThemeWrapper.h"
  216. #include "Common/XTPColorManager.h"
  217. class _XTP_EXT_CLASS CXTPButtonTheme : public CCmdTarget
  218. {
  219. public:
  220. CXTPButtonTheme();
  221. virtual ~CXTPButtonTheme();
  222. virtual void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  223. void DrawFocusRect(CDC* pDC, CXTPButton* pButton);
  224. void DrawButtonVisualStyleBackground(CDC* pDC, CXTPButton* pButton);
  225. virtual void RefreshMetrics(CXTPButton* pButton);
  226. void DrawPushButtonText(CDC* pDC, CXTPButton* pButton);
  227. void DrawPushButtonIcon(CDC* pDC, CXTPButton* pButton);
  228. void DrawPushButtonDropDown(CDC* pDC, CXTPButton* pButton);
  229. COLORREF GetTextColor(CXTPButton* pButton);
  230. virtual void DrawCheckBoxMark(CDC* pDC, CXTPButton* pButton);
  231. virtual void DrawRadioButtonMark(CDC* pDC, CXTPButton* pButton);
  232. void DrawButtonText(CDC* pDC, CXTPButton* pButton);
  233. virtual void DrawGroupBox(CDC* pDC, CXTPButton* pButton);
  234. void CalcRects(CDC* pDC, CXTPButton* pButton, CRect* pButtonText, UINT* pDrawFlags, CRect* pButtonIcon);
  235. void CalcRect(CDC* pDC, CXTPButton* pButton, LPRECT lprc, int code);
  236. BOOL IsVisualThemeUsed(CXTPButton* pButton);
  237. void AlphaEllipse(CDC* pDC, CRect rc, COLORREF clrBorder, COLORREF clrFace);
  238. CXTPPaintManagerColor m_crTextDisabled;     // RGB value for disabled text color.
  239. CXTPPaintManagerColor m_crBorderHilite;     // RGB value for border highlight color.
  240. CXTPPaintManagerColor m_crBorderShadow;     // RGB value for border shadow color.
  241. CXTPPaintManagerColor m_crBorder3DHilite;   // RGB value for 3D border highlight color.
  242. CXTPPaintManagerColor m_crBorder3DShadow;   // RGB value for 3D border shadow color.
  243. CXTPPaintManagerColor m_crBack;
  244. CXTPPaintManagerColor m_crText;
  245. CXTPWinThemeWrapper m_themeButton;
  246. BOOL m_bOffsetHiliteText;
  247. int m_nBorderWidth;
  248. BOOL m_bFlatGlyphs;
  249. int m_cxBorder;
  250. int m_cyBorder;
  251. int m_cyEdge;
  252. int m_cxEdge;
  253. };
  254. class _XTP_EXT_CLASS CXTPButtonFlatTheme : public CXTPButtonTheme
  255. {
  256. public:
  257. CXTPButtonFlatTheme();
  258. void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  259. };
  260. class _XTP_EXT_CLASS CXTPButtonUltraFlatTheme : public CXTPButtonTheme
  261. {
  262. public:
  263. CXTPButtonUltraFlatTheme();
  264. void RefreshMetrics(CXTPButton* pButton);
  265. void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  266. virtual void DrawGroupBox(CDC* pDC, CXTPButton* pButton);
  267. virtual void DrawCheckBoxMark(CDC* pDC, CXTPButton* pButton);
  268. virtual void DrawRadioButtonMark(CDC* pDC, CXTPButton* pButton);
  269. CXTPPaintManagerColor m_crBackPushed; // RGB value for pushed background color.
  270. CXTPPaintManagerColor m_crBackHilite; // RGB value for highlighted background color.
  271. CXTPPaintManagerColor m_crTextPushed; // RGB value for highlighted text color.
  272. CXTPPaintManagerColor m_crTextHilite; // RGB value for pushed text color.
  273. CXTPPaintManagerColor m_crBackChecked;// RGB value for when the control is checked.
  274. BOOL m_bHiglightButtons;
  275. };
  276. class _XTP_EXT_CLASS CXTPButtonOffice2000Theme : public CXTPButtonUltraFlatTheme
  277. {
  278. public:
  279. CXTPButtonOffice2000Theme();
  280. void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  281. };
  282. class _XTP_EXT_CLASS CXTPButtonOffice2007Theme : public CXTPButtonUltraFlatTheme
  283. {
  284. public:
  285. CXTPButtonOffice2007Theme();
  286. void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  287. void DrawCheckBoxMark(CDC* pDC, CXTPButton* pButton);
  288. void DrawRadioButtonMark(CDC* pDC, CXTPButton* pButton);
  289. void RefreshMetrics(CXTPButton* pButton);
  290. };
  291. class _XTP_EXT_CLASS CXTPButtonOfficeXPTheme : public CXTPButtonUltraFlatTheme
  292. {
  293. public:
  294. CXTPButtonOfficeXPTheme();
  295. void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  296. void RefreshMetrics(CXTPButton* pButton);
  297. };
  298. class _XTP_EXT_CLASS CXTPButtonOffice2003Theme : public CXTPButtonOfficeXPTheme
  299. {
  300. public:
  301. CXTPButtonOffice2003Theme();
  302. BOOL m_bLunaTheme;
  303. void DrawButtonBackground(CDC* pDC, CXTPButton* pButton);
  304. void RefreshMetrics(CXTPButton* pButton);
  305. };
  306. AFX_INLINE BOOL CXTPButton::IsPushed() {
  307. return m_bPushed;
  308. }
  309. AFX_INLINE BOOL CXTPButton::IsHighlighted() {
  310. return m_bHot || (::GetCapture() == m_hWnd);
  311. }
  312. AFX_INLINE BOOL CXTPButton::GetFlatStyle() const{
  313. return m_bFlatStyle;
  314. }
  315. AFX_INLINE void CXTPButton::SetFlatStyle(BOOL bFlatStyle/* = TRUE*/) {
  316. m_bFlatStyle = bFlatStyle;
  317. RedrawButton();
  318. }
  319. AFX_INLINE BOOL CXTPButton::GetUseVisualStyle() const {
  320. return m_bUseVisualStyle;
  321. }
  322. AFX_INLINE long CXTPButton::GetBorderGap() const {
  323. return m_nBorderGap;
  324. }
  325. AFX_INLINE void CXTPButton::SetBorderGap(int nBorderGap) {
  326. m_nBorderGap = nBorderGap;
  327. RedrawButton();
  328. }
  329. AFX_INLINE XTPPushButtonStyle CXTPButton::GetPushButtonStyle() const {
  330. return (XTPPushButtonStyle)m_nPushButtonStyle;
  331. }
  332. AFX_INLINE void CXTPButton::SetPushButtonStyle(XTPPushButtonStyle nPushButtonStyle) {
  333. m_nPushButtonStyle = nPushButtonStyle;
  334. RedrawButton();
  335. }
  336. AFX_INLINE void CXTPButton::SetTextAlignment(DWORD dwAlignment) {
  337. ModifyStyle(BS_LEFT | BS_CENTER | BS_RIGHT | BS_TOP | BS_BOTTOM | BS_VCENTER, dwAlignment);
  338. RedrawButton();
  339. }
  340. AFX_INLINE int CXTPButton::GetImageAlignment() const {
  341. return m_nImageAlignment;
  342. }
  343. AFX_INLINE void CXTPButton::SetImageAlignment(DWORD dwAlignment) {
  344. m_nImageAlignment = dwAlignment;
  345. RedrawButton();
  346. }
  347. AFX_INLINE XTPButtonTextImageRelation CXTPButton::GetTextImageRelation() const {
  348. return (XTPButtonTextImageRelation)m_nTextImageRelation;
  349. }
  350. AFX_INLINE void CXTPButton::SetTextImageRelation(XTPButtonTextImageRelation realtion) {
  351. m_nTextImageRelation = realtion;
  352. RedrawButton();
  353. }
  354. AFX_INLINE long CXTPButton::GetImageGap() const {
  355. return m_nImageGap;
  356. }
  357. AFX_INLINE void CXTPButton::SetImageGap(int nImageGap) {
  358. m_nImageGap = nImageGap;
  359. }
  360. AFX_INLINE CXTPImageManagerIcon* CXTPButton::GetIcon() const {
  361. return m_pIcon;
  362. }
  363. AFX_INLINE XTPGroupBoxBorderStyle CXTPButton::GetBorderStyle() const {
  364. return (XTPGroupBoxBorderStyle)m_nBorderStyle;
  365. }
  366. AFX_INLINE void CXTPButton::SetBorderStyle(XTPGroupBoxBorderStyle style) {
  367. m_nBorderStyle = style;
  368. }
  369. AFX_INLINE BOOL CXTPButton::GetShowFocus() const {
  370. return m_bShowFocus;
  371. }
  372. AFX_INLINE void CXTPButton::SetShowFocus(BOOL bShowFocus) {
  373. m_bShowFocus = bShowFocus;
  374. }
  375. AFX_INLINE void CXTPButton::RedrawButton() {
  376. if (m_hWnd) Invalidate(FALSE);
  377. }
  378. AFX_INLINE CXTPMarkupContext* CXTPButton::GetMarkupContext() const {
  379. return m_pMarkupContext;
  380. }
  381. AFX_INLINE CXTPMarkupUIElement* CXTPButton::GetMarkupUIElement() {
  382. return m_pUIElement;
  383. }
  384. AFX_INLINE BOOL CXTPButton::IsDropDownStyle() const {
  385. return m_nPushButtonStyle == xtpButtonDropDown || m_nPushButtonStyle == xtpButtonDropDownRight || m_nPushButtonStyle == xtpButtonSplitDropDown;
  386. }
  387. #endif // #if !defined(__XTPBUTTON_H__)