rlm@1: // Hyperlink.cpp : implementation file rlm@1: // rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include "Hyperlink.h" rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // Hyperlink rlm@1: rlm@1: Hyperlink::Hyperlink() rlm@1: { rlm@1: m_over = false; rlm@1: } rlm@1: rlm@1: Hyperlink::~Hyperlink() rlm@1: { rlm@1: m_underlineFont.DeleteObject(); rlm@1: } rlm@1: rlm@1: rlm@1: BEGIN_MESSAGE_MAP(Hyperlink, CStatic) rlm@1: //{{AFX_MSG_MAP(Hyperlink) rlm@1: ON_WM_CTLCOLOR_REFLECT() rlm@1: ON_WM_ERASEBKGND() rlm@1: ON_WM_MOUSEMOVE() rlm@1: //}}AFX_MSG_MAP rlm@1: ON_CONTROL_REFLECT(STN_CLICKED, OnClicked) rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // Hyperlink message handlers rlm@1: rlm@1: void Hyperlink::PreSubclassWindow() rlm@1: { rlm@1: DWORD dwStyle = GetStyle(); rlm@1: ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY); rlm@1: rlm@1: // 32649 is the hand cursor rlm@1: m_cursor = LoadCursor(NULL, MAKEINTRESOURCE(32649)); rlm@1: rlm@1: CFont *font = GetFont(); rlm@1: rlm@1: LOGFONT lg; rlm@1: font->GetLogFont(&lg); rlm@1: rlm@1: lg.lfUnderline = TRUE; rlm@1: rlm@1: m_underlineFont.CreateFontIndirect(&lg); rlm@1: SetFont(&m_underlineFont); rlm@1: rlm@1: CStatic::PreSubclassWindow(); rlm@1: } rlm@1: rlm@1: void Hyperlink::OnClicked() rlm@1: { rlm@1: CString url; rlm@1: GetWindowText(url); rlm@1: ::ShellExecute(0, _T("open"), url, rlm@1: 0, 0, SW_SHOWNORMAL); rlm@1: } rlm@1: rlm@1: HBRUSH Hyperlink::CtlColor(CDC* pDC, UINT nCtlColor) rlm@1: { rlm@1: pDC->SetTextColor(RGB(0,0,240)); rlm@1: rlm@1: return (HBRUSH)GetStockObject(NULL_BRUSH); rlm@1: } rlm@1: rlm@1: BOOL Hyperlink::OnEraseBkgnd(CDC* pDC) rlm@1: { rlm@1: CRect rect; rlm@1: GetClientRect(rect); rlm@1: pDC->FillSolidRect(rect, ::GetSysColor(COLOR_3DFACE)); rlm@1: rlm@1: return TRUE; rlm@1: } rlm@1: rlm@1: void Hyperlink::OnMouseMove(UINT nFlags, CPoint point) rlm@1: { rlm@1: if(!m_over) { rlm@1: m_over = true; rlm@1: SetCapture(); rlm@1: ::SetCursor(m_cursor); rlm@1: } else { rlm@1: CRect r; rlm@1: GetClientRect(&r); rlm@1: rlm@1: if(!r.PtInRect(point)) { rlm@1: m_over = false; rlm@1: ReleaseCapture(); rlm@1: } rlm@1: } rlm@1: }