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

对话框与窗口

开发平台:

Visual C++

  1. // XTHyperLink.h interface for the CXTHyperLink 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(__XTHYPERLINK_H__)
  22. #define __XTHYPERLINK_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //===========================================================================
  28. // Summary:
  29. //     CXTHyperLink is a CStatic derived class. It is used to display a text
  30. //     string that is used as a hyperlink control. The link's active, hover,
  31. //     and selected color attributes are configurable.
  32. //===========================================================================
  33. class _XTP_EXT_CLASS CXTHyperLink : public CStatic
  34. {
  35. DECLARE_DYNAMIC(CXTHyperLink)
  36. public:
  37. //-----------------------------------------------------------------------
  38. // Summary:
  39. //     Constructs a CXTHyperLink object.
  40. //-----------------------------------------------------------------------
  41. CXTHyperLink();
  42. //-----------------------------------------------------------------------
  43. // Summary:
  44. //     Destroys a CXTHyperLink object, handles cleanup and deallocation.
  45. //-----------------------------------------------------------------------
  46. virtual ~CXTHyperLink();
  47. public:
  48. //-----------------------------------------------------------------------
  49. // Summary:
  50. //     Call this member function to enable or disable ShellExecute to be called
  51. //     for the URL that is specified for the hyperlink control.  If disabled,
  52. //     you can add a BN_CLICKED message handler to perform your own task when
  53. //     the link is clicked.
  54. // Parameters:
  55. //     bEnable - true to enable ShellExecute, false to disable.
  56. //-----------------------------------------------------------------------
  57. void EnableShellExecute(bool bEnable);
  58. //-----------------------------------------------------------------------
  59. // Summary:
  60. //     This member function sets the URL for the hyperlink control.
  61. // Parameters:
  62. //     lpszLink - A NULL terminated character string that
  63. //                represents the URL for the hyperlink.
  64. //-----------------------------------------------------------------------
  65. virtual void SetURL(LPCTSTR lpszLink);
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     This member function retrieves the URL for the hyperlink.
  69. // Returns:
  70. //     A CString object that represents the URL for the hyperlink control.
  71. //-----------------------------------------------------------------------
  72. virtual CString GetURL() const;
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     This member function will set the RGB color values for the hyperlink text.
  76. // Parameters:
  77. //     clrLink    - An RGB value representing the color for the hyperlink text color.
  78. //     clrVisited - An RGB value representing the color for the hyperlink text color
  79. //                  when the mouse is hovering.
  80. //     clrHover   - An RGB value representing the color for the hyperlink text color
  81. //                  when the URL has been visited.
  82. //-----------------------------------------------------------------------
  83. virtual void SetColors(COLORREF clrLink, COLORREF clrVisited, COLORREF clrHover);
  84. //-----------------------------------------------------------------------
  85. // Summary:
  86. //     This member function retrieves the current hyperlink text color.
  87. // Returns:
  88. //     An RGB color value that represents the current hyperlink text color.
  89. //-----------------------------------------------------------------------
  90. virtual COLORREF GetLinkColor() const;
  91. //-----------------------------------------------------------------------
  92. // Summary:
  93. //     This member function retrieves the current hyperlink text color
  94. //     when the link has been activated.
  95. // Returns:
  96. //     An RGB color value that represents the current hyperlink text color when
  97. //     the link has been activated.
  98. //-----------------------------------------------------------------------
  99. virtual COLORREF GetVisitedColor() const;
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //     This member function retrieves the current hyperlink text color
  103. //     when the mouse hovers over the hyperlink.
  104. // Returns:
  105. //     An RGB color value that represents the current hyperlink text color when
  106. //     the mouse hovers over the hyperlink.
  107. //-----------------------------------------------------------------------
  108. virtual COLORREF GetHoverColor() const;
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     This member function will cause the control to display the hyperlink
  112. //     text color as visited.
  113. // Parameters:
  114. //     bVisited - A boolean flag that, when set to true, causes the control to
  115. //                display the hyperlink text color as visited.
  116. //-----------------------------------------------------------------------
  117. virtual void SetVisited(bool bVisited = true);
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     This member function checks to see if the user has visited the URL
  121. //     associated with the hyperlink.
  122. // Returns:
  123. //     true if the URL has been visited, otherwise returns false.
  124. //-----------------------------------------------------------------------
  125. virtual bool GetVisited() const;
  126. //-----------------------------------------------------------------------
  127. // Summary:
  128. //     This member function will set the cursor to be displayed when the
  129. //     mouse hovers over the hyperlink control.
  130. // Parameters:
  131. //     hCursor - Handle of the cursor to be associated with the hyperlink control.
  132. //-----------------------------------------------------------------------
  133. virtual void SetLinkCursor(HCURSOR hCursor);
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     This member function will get a handle to the current cursor associated
  137. //     with the hyperlink control.
  138. // Returns:
  139. //     A handle to the current cursor for the hyperlink control.
  140. //-----------------------------------------------------------------------
  141. virtual HCURSOR GetLinkCursor() const;
  142. //-----------------------------------------------------------------------
  143. // Summary:
  144. //     This member function will cause the hyperlink to display the text
  145. //     as underlined.  The default value is 'true.'
  146. // Parameters:
  147. //     bUnderline - A boolean flag that, when set to true, causes the control to
  148. //                  display the text as underlined.
  149. //-----------------------------------------------------------------------
  150. virtual void SetUnderline(bool bUnderline = true);
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     This member function checks to see if the hyperlink text is underlined.
  154. // Returns:
  155. //     true if the hyperlink text is underlined, otherwise returns false.
  156. //-----------------------------------------------------------------------
  157. virtual bool GetUnderline() const;
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     This member function will set the background fill color for the hyperlink
  161. //     control. By default the hyperlink control uses the system color for COLOR_3DFACE.
  162. // Parameters:
  163. //     clrBack - An RGB value representing the background fill color.
  164. //-----------------------------------------------------------------------
  165. virtual void SetBackColor(COLORREF clrBack);
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //     This member function will return the current background fill color for the
  169. //     hyperlink control.
  170. // Returns:
  171. //     A COLOREF value.
  172. //-----------------------------------------------------------------------
  173. virtual COLORREF GetBackColor() const;
  174. //-----------------------------------------------------------------------
  175. // Summary:
  176. //     This member function is called to execute the shell command associated
  177. //     with the current URL.
  178. // Parameters:
  179. //     lpszLink - Points to a null terminated string that represents the URL to
  180. //                jump to.  If NULL, the default URL is activated.
  181. //     nShowCmd - Display state for shell command associated with the URL.  The default
  182. //                is SW_SHOW.
  183. //     lpszParams - Points to a null terminated string that represents additional
  184. //                  parameters that are to be passed to the ShellExecute command.
  185. //     lpszDir - Points to a null terminated string that represents the default
  186. //               directory.
  187. // Returns:
  188. //     TRUE if SUCCESSFUL, otherwise FALSE.
  189. //-----------------------------------------------------------------------
  190. virtual bool GotoURL(LPCTSTR lpszLink = NULL, int nShowCmd = SW_SHOW, LPCTSTR lpszParams = NULL, LPCTSTR lpszDir = NULL);
  191. //-----------------------------------------------------------------------
  192. // Summary:
  193. //     This member function checks to see if the hyperlink control is a
  194. //     text control.
  195. // Returns:
  196. //     true if the hyperlink control is a text control, otherwise returns false.
  197. //-----------------------------------------------------------------------
  198. virtual bool IsTextControl();
  199. //-----------------------------------------------------------------------
  200. // Summary:
  201. //     Call this member function to enable or disable tooltips for the hyperlink
  202. //     control.
  203. // Parameters:
  204. //     bEnable - true to enable tooltips.
  205. //-----------------------------------------------------------------------
  206. void EnableToolTips(bool bEnable = true);
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     Call this member function to set the tooltip text for the tooltip associated
  210. //     with the hyperlink control.
  211. // Parameters:
  212. //     lpszTipText - NULL terminated string that represents the new tooltip text to display.
  213. //-----------------------------------------------------------------------
  214. void SetTipText(LPCTSTR lpszTipText);
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     Call this member to determine if the hyperlink is currently hot.
  218. // Remarks:
  219. //     If the link is hot, the mouse pointer is positioned over the link.
  220. // Returns:
  221. //     TRUE if the hyperlink is currently hot.  FALSE otherwise.
  222. //-----------------------------------------------------------------------
  223. virtual bool IsLinkHot();
  224. //-----------------------------------------------------------------------
  225. // Summary:
  226. //     This member function is called by the CXTHyperLink object to
  227. //     display a message box whenever an error occurs.
  228. // Parameters:
  229. //     iErrorNo - See the ShellExecute API for a list of error codes.
  230. //-----------------------------------------------------------------------
  231. virtual void ReportError(int iErrorNo);
  232. protected:
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //     This member function is called by the CXTHyperLink class to
  236. //     perform initialization when the window is created or sub-classed.
  237. // Returns:
  238. //     TRUE if the window was successfully initialized, otherwise FALSE.
  239. //-----------------------------------------------------------------------
  240. virtual bool Init();
  241. //-----------------------------------------------------------------------
  242. // Summary:
  243. //     This member function is called by the CXTHyperLink class to
  244. //     initialize the font that are used by the hyperlink control.
  245. // Returns:
  246. //     true if the font was successfully created, otherwise false.
  247. //-----------------------------------------------------------------------
  248. virtual bool InitFont();
  249. //-----------------------------------------------------------------------
  250. // Summary:
  251. //     This member function is called by the CXTHyperLink class to
  252. //     initialize a font that are used by the hyperlink control.
  253. // Parameters:
  254. //     font       - Reference to the font to be created
  255. //     bUnderline - TRUE to create underline font
  256. // Returns:
  257. //     TRUE if the control was successfully initialized, otherwise FALSE.
  258. //-----------------------------------------------------------------------
  259. virtual BOOL CreateFont(CFont& font, BOOL bUnderline);
  260. //{{AFX_CODEJOCK_PRIVATE
  261. DECLARE_MESSAGE_MAP()
  262. //{{AFX_VIRTUAL(CXTHyperLink)
  263. virtual BOOL PreTranslateMessage(MSG* pMsg);
  264. virtual void PreSubclassWindow();
  265. protected:
  266. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  267. //}}AFX_VIRTUAL
  268. //{{AFX_MSG(CXTHyperLink)
  269. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  270. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  271. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
  272. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  273. afx_msg void OnTimer(UINT_PTR nIDEvent);
  274. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  275. afx_msg void OnPaint();
  276. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  277. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  278. afx_msg BOOL OnClicked();
  279. afx_msg LRESULT OnNcHitTest(CPoint point);
  280. //}}AFX_MSG
  281. //}}AFX_CODEJOCK_PRIVATE
  282. protected:
  283. bool         m_bShellExec;       // true to cause the hyperlink to call ShellExecute for the specified URL.
  284. bool         m_bPreSubclassInit; // true when initializing from PreSubclassWindow.
  285. bool         m_bUnderline;       // Set to true for underlined text.
  286. bool         m_bMouseOver;       // Set to true when the cursor is hovering over the control.
  287. bool         m_bVisited;         // Set to true when the hyperlink has been activated.
  288. bool         m_bTipEnabled;      // Set to false to disable tooltips.
  289. CFont        m_font;             // Font used by hyperlink control.
  290. CString      m_strLink;          // String object that represents the URL for this control.
  291. CString      m_strTipText;       // String object that represents the tooltip text for this control.
  292. HCURSOR      m_hcurHand;         // Handle to the default cursor for this control.
  293. COLORREF     m_clrLink;          // An RGB value representing the color for the hyperlink text color.
  294. COLORREF     m_clrHover;         // An RGB value representing the color for the hyperlink text color when the mouse is hovering.
  295. COLORREF     m_clrVisited;       // An RGB value representing the color for the hyperlink text color when the URL has been visited.
  296. COLORREF     m_clrBack;          // An RGB value representing the background fill color for the hyperlink control.
  297. CToolTipCtrl m_toolTip;          // Tooltip to be displayed for the control.
  298. };
  299. //////////////////////////////////////////////////////////////////////
  300. AFX_INLINE CString CXTHyperLink::GetURL() const {
  301. return m_strLink;
  302. }
  303. AFX_INLINE void CXTHyperLink::SetColors(COLORREF clrLink, COLORREF clrVisited, COLORREF clrHover) {
  304. m_clrLink = clrLink; m_clrVisited = clrVisited; m_clrHover = clrHover; RedrawWindow();
  305. }
  306. AFX_INLINE COLORREF CXTHyperLink::GetLinkColor() const {
  307. return m_clrLink;
  308. }
  309. AFX_INLINE COLORREF CXTHyperLink::GetVisitedColor() const {
  310. return m_clrVisited;
  311. }
  312. AFX_INLINE COLORREF CXTHyperLink::GetHoverColor() const {
  313. return m_clrHover;
  314. }
  315. AFX_INLINE void CXTHyperLink::SetVisited(bool bVisited) {
  316. m_bVisited = bVisited; RedrawWindow();
  317. }
  318. AFX_INLINE bool CXTHyperLink::GetVisited() const {
  319. return m_bVisited;
  320. }
  321. AFX_INLINE void CXTHyperLink::SetLinkCursor(HCURSOR hCursor) {
  322. m_hcurHand = hCursor;
  323. }
  324. AFX_INLINE HCURSOR CXTHyperLink::GetLinkCursor() const {
  325. return m_hcurHand;
  326. }
  327. AFX_INLINE void CXTHyperLink::SetUnderline(bool bUnderline) {
  328. m_bUnderline = bUnderline; InitFont();
  329. }
  330. AFX_INLINE bool CXTHyperLink::GetUnderline() const {
  331. return m_bUnderline;
  332. }
  333. AFX_INLINE bool CXTHyperLink::IsTextControl() {
  334. return ((GetStyle() & 0xFF) <= SS_RIGHT) ? true : false;
  335. }
  336. AFX_INLINE void CXTHyperLink::EnableShellExecute(bool bEnable) {
  337. m_bShellExec = bEnable;
  338. }
  339. AFX_INLINE void CXTHyperLink::SetBackColor(COLORREF clrBack) {
  340. m_clrBack = clrBack; RedrawWindow();
  341. }
  342. AFX_INLINE COLORREF CXTHyperLink::GetBackColor() const {
  343. return (m_clrBack == (COLORREF)-1) ? GetXtremeColor(COLOR_3DFACE) : m_clrBack;
  344. }
  345. #endif // #if !defined(__XTHYPERLINK_H__)