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

对话框与窗口

开发平台:

Visual C++

  1. // XTPTaskDialogControls.h
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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(__XTPTASKLINKCTRL_H__)
  22. #define __XTPTASKLINKCTRL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTButtonTheme.h"
  28. //===========================================================================
  29. // Summary:
  30. //     CXTPTaskDialogLinkCtrl is a CStatic derived class that is used to
  31. //     display a text block that contains clickable links.
  32. //===========================================================================
  33. class _XTP_EXT_CLASS CXTPTaskDialogLinkCtrl : public CStatic
  34. {
  35. public:
  36. //===========================================================================
  37. // Summary:
  38. //     LINKITEM is Used to set and retrieve information about a
  39. //     link item.
  40. // See Also:
  41. //     CXTPTaskDialogLinkCtrl::HitTest
  42. //===========================================================================
  43. struct LINKITEM
  44. {
  45. DWORD       nStart;     // Starting character position,
  46. int         nIndex;     // Character index of the character nearest the specified point.
  47. CString     strLabel;   // Specifies the execute string for the link.
  48. CString     strUrl;     // Specifies the display string for the link.
  49. CArray<RECT, RECT&> arrParts;
  50. };
  51. typedef CArray<LINKITEM*, LINKITEM*> CTaskLinkItemArray;
  52. DECLARE_DYNCREATE(CXTPTaskDialogLinkCtrl)
  53. public:
  54. //-----------------------------------------------------------------------
  55. // Summary:
  56. //       Constructs a CXTPTaskDialogLinkCtrl object.
  57. //-----------------------------------------------------------------------
  58. CXTPTaskDialogLinkCtrl();
  59. //-----------------------------------------------------------------------
  60. // Summary:
  61. //     Destroys a CXTPTaskDialogLinkCtrl object, handles cleanup and
  62. //     deallocation.
  63. //-----------------------------------------------------------------------
  64. virtual ~CXTPTaskDialogLinkCtrl();
  65. //-----------------------------------------------------------------------
  66. // Summary:
  67. //     Call this member function to create a CXTPTaskDialogLinkCtrl
  68. //     text control. The control is used by CXTPTaskDialog to display a
  69. //     static text block that contains clickable link text.
  70. // Parameters:
  71. //     rect       - Specifies the edit contro's size and position. Can be
  72. //                  a CRect object or RECT structure.
  73. //     strBuffer  - NULL terminated string that contains link text
  74. //                  to be displayed.
  75. //     pFont      - Specifies the font to be used with the text control.
  76. //     pParentWnd - Specifies the edit contro's parent window (usually a
  77. //                  CXTPTaskDialog). It must not be NULL.
  78. // Remarks:
  79. //       When specified strBuffer can contain links in the form:
  80. // <code>
  81. // <A HREF="executablestring">Hyperlink Text</A>.
  82. // </code>
  83. // Returns:
  84. //     Nonzero if initialization is successful; otherwise 0.
  85. //-----------------------------------------------------------------------
  86. virtual BOOL Create(const CRect& rect, CString& strBuffer, CFont* pFont, CWnd* pParentWnd);
  87. //-----------------------------------------------------------------------
  88. // Summary:
  89. //     Call this member function to return the focused link.
  90. // Returns:
  91. //     The pointer of the currently focused link, otherwise NULL.
  92. //-----------------------------------------------------------------------
  93. LINKITEM* GetFocusedLink() const;
  94. //-----------------------------------------------------------------------
  95. // Summary:
  96. //     Call this member function to set the focus to specified link
  97. // Parameters:
  98. //     iFocusChar - The index of the focused item or -1 to indicate
  99. //                  no focus.
  100. //-----------------------------------------------------------------------
  101. void FocusItem(int iFocusItem);
  102. //-----------------------------------------------------------------------
  103. // Summary:
  104. //     Call this member function to return the link information from
  105. //     the specified cursor position.
  106. // Parameters:
  107. //     pt - Client coordinates.
  108. // Returns:
  109. //     Returns Pointer on success, NULL on failure.
  110. //-----------------------------------------------------------------------
  111. LINKITEM* HitTest(CPoint pt) const;
  112. //-----------------------------------------------------------------------
  113. // Summary:
  114. //     This member function is called to return the character index of
  115. //     the first link located after the index specified by iPos.
  116. // Parameters:
  117. //     strBuffer - NULL terminated string to search for link text.
  118. //     iPos      - Starting position to begin search from.
  119. // Returns:
  120. //     The LOWORD value contains the starting position of the first
  121. //     link text block found, the HIWORD value contains the number
  122. //     of characters in the link text.
  123. //-----------------------------------------------------------------------
  124. DWORD GetLinkPos(CString strBuffer, int iPos = 0);
  125. //-----------------------------------------------------------------------
  126. // Summary:
  127. //     This member function is called to extract link information from
  128. //     the specified string buffer and store it internally. The string is
  129. //     then reformatted to remove the link tag information.
  130. // Parameters:
  131. //     strBuffer - NULL terminated string to search for link text.
  132. // Returns:
  133. //     TRUE if link text was located, otherwise FALSE.
  134. //-----------------------------------------------------------------------
  135. BOOL ExtractLinks(CString& strBuffer);
  136. //-----------------------------------------------------------------------
  137. // Summary:
  138. //     Call this member function to set the background color for the link
  139. //     control.
  140. // Parameters:
  141. //     crBack - RGB value representing the link control's background color.
  142. //-----------------------------------------------------------------------
  143. void SetBackColor(COLORREF crBack);
  144. //-----------------------------------------------------------------------
  145. // Summary:
  146. //     Call this member function to retrieve the link control's background
  147. //     color.
  148. // Returns:
  149. //     RGB value representing the link control's background color.
  150. //-----------------------------------------------------------------------
  151. COLORREF GetBackColor() const;
  152. //-----------------------------------------------------------------------
  153. // Summary:
  154. //     Call this member function to set the text color for the link
  155. //     control.
  156. // Parameters:
  157. //     crText - RGB value representing the link control's text color.
  158. //-----------------------------------------------------------------------
  159. void SetTextColor(COLORREF crText);
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //     Call this member function to retrieve the link control's text
  163. //     color.
  164. // Returns:
  165. //     RGB value representing the link control's text color.
  166. //-----------------------------------------------------------------------
  167. COLORREF GetTextColor() const;
  168. //-----------------------------------------------------------------------
  169. // Summary:
  170. //     Call this member function to set the text link color for the link
  171. //     control.
  172. // Parameters:
  173. //     crTextLink - RGB value representing the link control's text link color.
  174. //-----------------------------------------------------------------------
  175. void SetTextLinkColor(COLORREF crTextLink);
  176. //-----------------------------------------------------------------------
  177. // Summary:
  178. //     Call this member function to retrieve the link control's text link
  179. //     color.
  180. // Returns:
  181. //     RGB value representing the link control's text link color.
  182. //-----------------------------------------------------------------------
  183. COLORREF GetTextLinkColor() const;
  184. private:
  185. void DrawText(CDC* pDC, CRect rClient);
  186. void DrawTextPart(CDC* pDC, int&x, int&y, int nWidth, CString strBuffer, LINKITEM* pItem);
  187. int DrawTextPartText(CDC* pDC, CString strBuffer, int x, int y, LINKITEM* pItem);
  188. void RemoveAllLinks();
  189. protected:
  190. //{{AFX_CODEJOCK_PRIVATE
  191. DECLARE_MESSAGE_MAP()
  192. //{{AFX_VIRTUAL(CXTPTaskDialogLinkCtrl)
  193. BOOL PreCreateWindow(CREATESTRUCT& cs);
  194. void PreSubclassWindow();
  195. //}}AFX_VIRTUAL
  196. //{{AFX_MSG(CXTPTaskDialogLinkCtrl)
  197. afx_msg void OnPaint();
  198. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  199. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  200. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  201. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  202. afx_msg LRESULT OnNcHitTest(CPoint /*point*/);
  203. afx_msg void OnSetFocus(CWnd* pOldWnd);
  204. afx_msg void OnKillFocus(CWnd* pNewWnd);
  205. afx_msg UINT OnGetDlgCode();
  206. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  207. afx_msg LRESULT OnUpdateUIState(WPARAM wParam, LPARAM lParam);
  208. LRESULT OnSetText(WPARAM wParam, LPARAM lParam);
  209. //}}AFX_MSG
  210. //}}AFX_CODEJOCK_PRIVATE
  211. protected:
  212. int                         m_nFocused;         // Index of the currently focus link.
  213. CFont                       m_fontUL;           // Font used to render link text.
  214. CString                     m_strBuffer;        // Text buffer to be displayed in the control.
  215. HCURSOR                     m_hcurHand;         // Handle to text link cursor.
  216. COLORREF                    m_crBack;           // RGB background color value.
  217. COLORREF                    m_crText;           // RGB text color value.
  218. COLORREF                    m_crTextLink;       // RGB link text color value.
  219. CTaskLinkItemArray          m_arrLinks;         // Array of links for the display text.
  220. BOOL m_bPreSubclassWindow;
  221. };
  222. //===========================================================================
  223. // CXTPTaskButtonTheme
  224. //===========================================================================
  225. class _XTP_EXT_CLASS CXTPTaskButtonTheme : public CXTButtonTheme
  226. {
  227. public:
  228. CXTPTaskButtonTheme(BOOL bThemeReady);
  229. CXTPTaskButtonTheme();
  230. virtual void RefreshMetrics();
  231. void SetTitleFont(CFont* FontTitle);
  232. CFont* GetTitleFont();
  233. protected:
  234. virtual BOOL DrawButtonThemeBackground(LPDRAWITEMSTRUCT lpDIS, CXTButton* pButton);
  235. virtual BOOL DrawWinThemeBackground(LPDRAWITEMSTRUCT lpDIS, CXTButton* pButton);
  236. virtual void DrawButtonText(CDC* pDC, UINT nState, CRect& rcItem, CXTButton* pButton);
  237. virtual COLORREF GetTextColor(UINT nState, CXTButton* pButton);
  238. virtual void DrawFocusRect(CDC* pDC, UINT nState, CRect& rcItem, CXTButton* pButton);
  239. virtual BOOL CanHilite(CXTButton* pButton);
  240. virtual CPoint CalculateImagePosition(CDC* pDC, UINT nState, CRect& rcItem, bool bHasPushedImage, CXTButton* pButton);
  241. virtual void GetButtonText(CXTButton* pButton);
  242. virtual CPoint GetTextPosition(UINT nState, CRect& rcItem, CSize& sizeText, CXTButton* pButton);
  243. virtual void DrawButtonIcon(CDC* pDC, UINT nState, CRect& rcItem, CXTButton* pButton);
  244. CFont* m_pFontTitle;
  245. CPoint m_ptMargin;
  246. CString m_strButton;
  247. CString m_strCaptText;
  248. CString m_strNoteText;
  249. CBitmap m_bmpBackClassic;
  250. CBitmap m_bmpBackThemed;
  251. CXTPPaintManagerColor m_crTextHilite;
  252. CXTPPaintManagerColor m_crBackSelected;
  253. CXTPPaintManagerColor m_crBorderActive;
  254. BOOL m_bThemeReady;
  255. };
  256. //===========================================================================
  257. // CXTPTaskButtonThemeExpando
  258. //===========================================================================
  259. class _XTP_EXT_CLASS CXTPTaskButtonThemeExpando : public CXTButtonTheme
  260. {
  261. public:
  262. CXTPTaskButtonThemeExpando();
  263. void DrawItem(LPDRAWITEMSTRUCT lpDIS, CXTButton* pButton);
  264. };
  265. //===========================================================================
  266. // CXTPTaskDialogProgressCtrl
  267. //===========================================================================
  268. class _XTP_EXT_CLASS CXTPTaskDialogProgressCtrl : public CProgressCtrl
  269. {
  270. public:
  271. CXTPTaskDialogProgressCtrl();
  272. protected:
  273. DECLARE_MESSAGE_MAP()
  274. //{{AFX_VIRTUAL(CXTPTaskDialogProgressCtrl)
  275. //}}AFX_VIRTUAL
  276. //{{AFX_MSG(CXTPTaskDialogProgressCtrl)
  277. afx_msg void OnPaint();
  278. afx_msg void OnTimer(UINT_PTR nIDEvent);
  279. afx_msg LRESULT OnStartMarquee(WPARAM wParam, LPARAM lParam);
  280. afx_msg LRESULT OnSetState(WPARAM wParam, LPARAM lParam);
  281. //}}AFX_MSG
  282. protected:
  283. int m_nState;
  284. int m_nMarqueePos;
  285. UINT m_nMarqueeDelay;
  286. BOOL m_bMarquee;
  287. };
  288. AFX_INLINE void CXTPTaskDialogLinkCtrl::SetBackColor(COLORREF crBack) {
  289. m_crBack = crBack;
  290. }
  291. AFX_INLINE COLORREF CXTPTaskDialogLinkCtrl::GetBackColor() const {
  292. return m_crBack;
  293. }
  294. AFX_INLINE void CXTPTaskDialogLinkCtrl::SetTextColor(COLORREF crText) {
  295. m_crText = crText;
  296. }
  297. AFX_INLINE COLORREF CXTPTaskDialogLinkCtrl::GetTextColor() const {
  298. return m_crText;
  299. }
  300. AFX_INLINE void CXTPTaskDialogLinkCtrl::SetTextLinkColor(COLORREF crTextLink) {
  301. m_crTextLink = crTextLink;
  302. }
  303. AFX_INLINE COLORREF CXTPTaskDialogLinkCtrl::GetTextLinkColor() const {
  304. return m_crTextLink;
  305. }
  306. /////////////////////////////////////////////////////////////////////////////
  307. //{{AFX_INSERT_LOCATION}}
  308. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  309. #endif // !defined(__XTPTASKLINKCTRL_H__)