1 /////////////////////////////
\r
5 #include "Hyperlink.h"
\r
7 CHyperlink::CHyperlink() : m_bUrlVisited(FALSE), m_bClicked(FALSE), m_crVisited(RGB(128, 0, 128)),
\r
8 m_crNotVisited(RGB(0,0,255))
\r
10 // Create the cursor
\r
11 m_hCursor = ::LoadCursor(NULL, IDC_HAND);
\r
13 // IDC_HAND is not available on Win95, so load a reasonable alternative
\r
15 m_hCursor = ::LoadCursor(NULL, IDC_ARROW);
\r
18 CHyperlink::~CHyperlink()
\r
22 void CHyperlink::OnInitialUpdate()
\r
24 CFont* pFont = GetFont();
\r
25 LOGFONT lf = pFont->GetLogFont();
\r
26 lf.lfUnderline = TRUE;
\r
27 m_UrlFont.CreateFontIndirect(&lf);
\r
30 void CHyperlink::OnLButtonDown()
\r
36 void CHyperlink::OnLButtonUp(LPARAM lParam)
\r
43 pt.x = (short)LOWORD(lParam);
\r
44 pt.y = (short)HIWORD(lParam);
\r
46 CRect rc = GetWindowRect();
\r
48 if (rc.PtInRect(pt)) OpenUrl();
\r
52 void CHyperlink::OpenUrl()
\r
54 TCHAR szUrl[ MAX_PATH + 1 ] = _T("https://sourceforge.net/projects/win32-framework");
\r
56 if( (int)(LRESULT)::ShellExecute(NULL, _T("open"), szUrl, NULL, NULL, SW_SHOWNORMAL ) > 32)
\r
58 m_bUrlVisited = TRUE;
\r
60 // redraw the window to update the color
\r
65 LRESULT CHyperlink::OnMessageReflect(UINT uMsg, WPARAM wParam, LPARAM lParam)
\r
67 UNREFERENCED_PARAMETER(lParam);
\r
69 // Messages such as WM_CTLCOLORSTATIC are reflected back to the CWnd object that created them.
\r
70 if (uMsg == WM_CTLCOLORSTATIC)
\r
72 CDC* pDC = FromHandle((HDC)wParam);
\r
73 pDC->SetTextColor( m_bUrlVisited? m_crVisited : m_crNotVisited);
\r
74 pDC->SetBkMode(TRANSPARENT);
\r
75 pDC->SelectObject(&m_UrlFont);
\r
76 return (LRESULT)GetSysColorBrush(COLOR_BTNFACE);
\r
81 LRESULT CHyperlink::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
\r
85 case WM_LBUTTONDOWN:
\r
90 OnLButtonUp(lParam);
\r
94 SetCursor(m_hCursor);
\r
95 return 1L; // Non-zero return prevents default processing
\r
98 return HTCLIENT; // Claim that the mouse is in a client area
\r
101 return WndProcDefault(uMsg, wParam, lParam);
\r