Merge branch 'master' of git.ucc.asn.au:/matches/honours
[matches/honours.git] / research / transmission_spectroscopy / TOF / Win32++ / samples / DialogDemo / src / Hyperlink.cpp
1 /////////////////////////////\r
2 // Hyperlink.cpp\r
3 \r
4 #include "stdafx.h"\r
5 #include "Hyperlink.h"\r
6 \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
9 {\r
10         // Create the cursor\r
11         m_hCursor = ::LoadCursor(NULL, IDC_HAND);\r
12 \r
13         // IDC_HAND is not available on Win95, so load a reasonable alternative\r
14         if( !m_hCursor )\r
15                 m_hCursor = ::LoadCursor(NULL, IDC_ARROW);\r
16 }\r
17 \r
18 CHyperlink::~CHyperlink()\r
19 {\r
20 }\r
21 \r
22 void CHyperlink::OnInitialUpdate()\r
23 {\r
24         CFont* pFont = GetFont();\r
25         LOGFONT lf = pFont->GetLogFont();\r
26         lf.lfUnderline = TRUE;\r
27         m_UrlFont.CreateFontIndirect(&lf);\r
28 }\r
29 \r
30 void CHyperlink::OnLButtonDown()\r
31 {\r
32         SetCapture();\r
33         m_bClicked = TRUE;\r
34 }\r
35 \r
36 void CHyperlink::OnLButtonUp(LPARAM lParam)\r
37 {\r
38         ReleaseCapture();\r
39         if(m_bClicked)\r
40         {\r
41                 m_bClicked = FALSE;\r
42                 CPoint pt;\r
43                 pt.x = (short)LOWORD(lParam);\r
44                 pt.y = (short)HIWORD(lParam);\r
45                 ClientToScreen(pt);\r
46                 CRect rc = GetWindowRect(); \r
47 \r
48                 if (rc.PtInRect(pt)) OpenUrl();\r
49         }\r
50 }\r
51 \r
52 void CHyperlink::OpenUrl()\r
53 {\r
54         TCHAR szUrl[ MAX_PATH + 1 ] = _T("https://sourceforge.net/projects/win32-framework");\r
55 \r
56         if( (int)(LRESULT)::ShellExecute(NULL, _T("open"), szUrl, NULL, NULL, SW_SHOWNORMAL ) > 32)\r
57         {\r
58                 m_bUrlVisited = TRUE;\r
59 \r
60                 // redraw the window to update the color\r
61                 Invalidate();\r
62         }\r
63 }\r
64 \r
65 LRESULT CHyperlink::OnMessageReflect(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
66 {\r
67         UNREFERENCED_PARAMETER(lParam);\r
68 \r
69         // Messages such as WM_CTLCOLORSTATIC are reflected back to the CWnd object that created them.\r
70         if (uMsg ==  WM_CTLCOLORSTATIC)\r
71         {\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
77         }\r
78         return 0L;\r
79 }\r
80 \r
81 LRESULT CHyperlink::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
82 {\r
83         switch (uMsg)\r
84         {\r
85         case WM_LBUTTONDOWN:\r
86                 OnLButtonDown();\r
87                 break;\r
88 \r
89         case WM_LBUTTONUP:\r
90                 OnLButtonUp(lParam);\r
91                 break;\r
92 \r
93         case WM_SETCURSOR:\r
94                 SetCursor(m_hCursor);\r
95                 return 1L;      // Non-zero return prevents default processing\r
96 \r
97         case WM_NCHITTEST:\r
98                 return HTCLIENT;  // Claim that the mouse is in a client area\r
99         }\r
100 \r
101         return WndProcDefault(uMsg, wParam, lParam);\r
102 }\r
103 \r
104 \r

UCC git Repository :: git.ucc.asn.au