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

对话框与窗口

开发平台:

Visual C++

  1. // HyperLinkDlg.cpp : implementation file
  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. #include "stdafx.h"
  21. #include "HyperLink.h"
  22. #include "HyperLinkDlg.h"
  23. #include "AboutDlg.h"
  24. #ifdef _DEBUG
  25. #define new DEBUG_NEW
  26. #undef THIS_FILE
  27. static char THIS_FILE[] = __FILE__;
  28. #endif
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CHyperLinkDlg dialog
  31. CHyperLinkDlg::CHyperLinkDlg(CWnd* pParent /*=NULL*/)
  32. : CXTResizeDialog(CHyperLinkDlg::IDD, pParent)
  33. {
  34. //{{AFX_DATA_INIT(CHyperLinkDlg)
  35. m_bUnderline = TRUE;
  36. m_bVisited = FALSE;
  37. m_strURL = _T("http://www.codejock.com");
  38. m_strEditTxt = _T("Visit Codejock Software's home page");
  39. m_bShellExecute = TRUE;
  40. //}}AFX_DATA_INIT
  41. m_clrLink    = RGB(0x00, 0x00, 0xFF);   // blue
  42. m_clrHover   = RGB(0xFF, 0x00, 0x00);   // red
  43. m_clrVisited = RGB(0x80, 0x00, 0x80);   // purple
  44. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  45. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  46. }
  47. void CHyperLinkDlg::DoDataExchange(CDataExchange* pDX)
  48. {
  49. CXTResizeDialog::DoDataExchange(pDX);
  50. //{{AFX_DATA_MAP(CHyperLinkDlg)
  51. DDX_Control(pDX, IDC_HYP_TEXT, m_hyperLink);
  52. DDX_Control(pDX, IDC_CLR_LINK, m_cpLink);
  53. DDX_Control(pDX, IDC_CLR_HOVER, m_cpHover);
  54. DDX_Control(pDX, IDC_CLR_VISITED, m_cpVisited);
  55. DDX_Check(pDX, IDC_CHK_UNDERLINE, m_bUnderline);
  56. DDX_Check(pDX, IDC_CHK_VISITED, m_bVisited);
  57. DDX_Text(pDX, IDC_EDIT_URL, m_strURL);
  58. DDX_Text(pDX, IDC_EDIT_TXT, m_strEditTxt);
  59. DDX_Check(pDX, IDC_CHK_SHELL, m_bShellExecute);
  60. //}}AFX_DATA_MAP
  61. DDX_XTColorPicker(pDX, IDC_CLR_LINK, m_clrLink);
  62. DDX_XTColorPicker(pDX, IDC_CLR_HOVER, m_clrHover);
  63. DDX_XTColorPicker(pDX, IDC_CLR_VISITED, m_clrVisited);
  64. }
  65. BEGIN_MESSAGE_MAP(CHyperLinkDlg, CXTResizeDialog)
  66. //{{AFX_MSG_MAP(CHyperLinkDlg)
  67. ON_WM_SYSCOMMAND()
  68. ON_WM_PAINT()
  69. ON_WM_QUERYDRAGICON()
  70. ON_EN_CHANGE(IDC_EDIT_URL, OnChangeEditUrl)
  71. ON_BN_CLICKED(IDC_CHK_UNDERLINE, OnChkUnderline)
  72. ON_BN_CLICKED(IDC_CHK_VISITED, OnChkVisited)
  73. ON_WM_DESTROY()
  74. ON_EN_CHANGE(IDC_EDIT_TXT, OnChangeEditTxt)
  75. ON_BN_CLICKED(IDC_HYP_TEXT, OnHypText)
  76. ON_BN_CLICKED(IDC_CHK_SHELL, OnChkShell)
  77. //}}AFX_MSG_MAP
  78. ON_CPN_XT_SELENDOK(IDC_CLR_LINK, OnSelEndOkColor)
  79. ON_CPN_XT_SELENDOK(IDC_CLR_HOVER, OnSelEndOkColor)
  80. ON_CPN_XT_SELENDOK(IDC_CLR_VISITED, OnSelEndOkColor)
  81. END_MESSAGE_MAP()
  82. /////////////////////////////////////////////////////////////////////////////
  83. // CHyperLinkDlg message handlers
  84. BOOL CHyperLinkDlg::OnInitDialog()
  85. {
  86. CXTResizeDialog::OnInitDialog();
  87. // Add "About..." menu item to system menu.
  88. // IDM_ABOUTBOX must be in the system command range.
  89. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  90. ASSERT(IDM_ABOUTBOX < 0xF000);
  91. CMenu* pSysMenu = GetSystemMenu(FALSE);
  92. if (pSysMenu != NULL)
  93. {
  94. CString strAboutMenu;
  95. strAboutMenu.LoadString(IDS_ABOUTBOX);
  96. if (!strAboutMenu.IsEmpty())
  97. {
  98. pSysMenu->AppendMenu(MF_SEPARATOR);
  99. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  100. }
  101. }
  102. // Set the icon for this dialog.  The framework does this automatically
  103. //  when the application's main window is not a dialog
  104. SetIcon(m_hIcon, TRUE);         // Set big icon
  105. SetIcon(m_hIcon, FALSE);        // Set small icon
  106. // Set control resizing.
  107. SetResize(IDC_HYP_TEXT, SZ_TOP_LEFT,     SZ_TOP_RIGHT);
  108. SetResize(IDC_EDIT_TXT, SZ_TOP_LEFT,     SZ_TOP_RIGHT);
  109. SetResize(IDC_EDIT_URL, SZ_TOP_LEFT,     SZ_TOP_RIGHT);
  110. SetResize(IDCANCEL,     SZ_BOTTOM_RIGHT, SZ_BOTTOM_RIGHT);
  111. // prevent vertical resizing.
  112. SetFlag(xtResizeNoVertical);
  113. // Load window placement
  114. LoadPlacement(_T("CHyperLinkDlg"));
  115. m_cpVisited.SetColor(m_clrVisited);
  116. m_cpVisited.SetDefaultColor(m_clrVisited);
  117. m_cpVisited.ShowText(TRUE);
  118. m_cpLink.SetColor(m_clrLink);
  119. m_cpLink.SetDefaultColor(m_clrLink);
  120. m_cpLink.ShowText(TRUE);
  121. m_cpHover.SetColor(m_clrHover);
  122. m_cpHover.SetDefaultColor(m_clrHover);
  123. m_cpHover.ShowText(TRUE);
  124. m_hyperLink.SetURL(m_strURL);
  125. m_hyperLink.SetColors(m_clrLink, m_clrVisited, m_clrHover);
  126. return TRUE;  // return TRUE  unless you set the focus to a control
  127. }
  128. void CHyperLinkDlg::OnDestroy()
  129. {
  130. // Save window placement
  131. SavePlacement(_T("CHyperLinkDlg"));
  132. CXTResizeDialog::OnDestroy();
  133. }
  134. void CHyperLinkDlg::OnSysCommand(UINT nID, LPARAM lParam)
  135. {
  136. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  137. {
  138. CAboutDlg dlgAbout;
  139. dlgAbout.DoModal();
  140. }
  141. else
  142. {
  143. CXTResizeDialog::OnSysCommand(nID, lParam);
  144. }
  145. }
  146. // If you add a minimize button to your dialog, you will need the code below
  147. //  to draw the icon.  For MFC applications using the document/view model,
  148. //  this is automatically done for you by the framework.
  149. void CHyperLinkDlg::OnPaint()
  150. {
  151. if (IsIconic())
  152. {
  153. CPaintDC dc(this); // device context for painting
  154. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  155. // Center icon in client rectangle
  156. int cxIcon = GetSystemMetrics(SM_CXICON);
  157. int cyIcon = GetSystemMetrics(SM_CYICON);
  158. CRect rect;
  159. GetClientRect(&rect);
  160. int x = (rect.Width() - cxIcon + 1) / 2;
  161. int y = (rect.Height() - cyIcon + 1) / 2;
  162. // Draw the icon
  163. dc.DrawIcon(x, y, m_hIcon);
  164. }
  165. else
  166. {
  167. CXTResizeDialog::OnPaint();
  168. }
  169. }
  170. // The system calls this to obtain the cursor to display while the user drags
  171. //  the minimized window.
  172. HCURSOR CHyperLinkDlg::OnQueryDragIcon()
  173. {
  174. return (HCURSOR) m_hIcon;
  175. }
  176. void CHyperLinkDlg::OnSelEndOkColor()
  177. {
  178. UpdateData();
  179. m_hyperLink.SetColors(m_clrLink, m_clrVisited, m_clrHover);
  180. }
  181. void CHyperLinkDlg::OnChangeEditUrl()
  182. {
  183. UpdateData();
  184. m_hyperLink.SetURL(m_strURL);
  185. }
  186. void CHyperLinkDlg::OnChkUnderline()
  187. {
  188. UpdateData();
  189. m_hyperLink.SetUnderline(m_bUnderline?true:false);
  190. m_hyperLink.Invalidate();
  191. }
  192. void CHyperLinkDlg::OnChkVisited()
  193. {
  194. UpdateData();
  195. m_hyperLink.SetVisited(m_bVisited?true:false);
  196. }
  197. void CHyperLinkDlg::OnChangeEditTxt()
  198. {
  199. UpdateData();
  200. m_hyperLink.SetWindowText(m_strEditTxt);
  201. m_hyperLink.Invalidate();
  202. }
  203. void CHyperLinkDlg::OnHypText()
  204. {
  205. m_bVisited = m_hyperLink.GetVisited();
  206. UpdateData(false);
  207. if (!m_bShellExecute) {
  208. AfxMessageBox(_T("Disabling Shell Execute will allow you to perform your own task when the hyperlink is clicked."));
  209. }
  210. }
  211. void CHyperLinkDlg::OnChkShell()
  212. {
  213. UpdateData();
  214. m_hyperLink.EnableShellExecute(m_bShellExecute ? true : false);
  215. }