OSDN Git Service

Remove the copyright notice and code to handle it. Modify the layout
[xkeymacs/xkeymacs.git] / xkeymacs / about.cpp
1 #include "stdafx.h"\r
2 #include "about.h"\r
3 #include <vector>\r
4 \r
5 /////////////////////////////////////////////////////////////////////////////\r
6 // CAboutDlg dialog used for App About\r
7 \r
8 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)\r
9 {\r
10         int major, minor, build, revision;\r
11         major = minor = build = revision = 0;\r
12 \r
13         TCHAR szFileName[MAX_PATH] = {'\0'};\r
14         GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
15         DWORD dwHandle = 0;\r
16 \r
17         DWORD dwLen = GetFileVersionInfoSize(szFileName, &dwHandle);\r
18         if (dwLen) {\r
19                 std::vector<BYTE> data(dwLen);\r
20                 if (GetFileVersionInfo(szFileName, dwHandle, dwLen, &data[0])) {\r
21                         VS_FIXEDFILEINFO *pInfo;\r
22                         UINT uLen;\r
23                         if (VerQueryValue(&data[0], _T("\\"), reinterpret_cast<LPVOID *>(&pInfo), &uLen)) {\r
24                                 major = pInfo->dwProductVersionMS >> 16;\r
25                                 minor = pInfo->dwProductVersionMS & 0xffff;\r
26                                 build = pInfo->dwProductVersionLS >> 16;\r
27                                 revision = pInfo->dwProductVersionLS & 0xffff;\r
28                         }\r
29                 }\r
30         }\r
31         m_versionInfo.Format(_T("%s Version %d.%d"), CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), major, minor);\r
32         if (build) {\r
33                 CString s;\r
34                 s.Format(_T(".%d"), build);\r
35                 m_versionInfo += s;\r
36                 if (revision) {\r
37                         s.Format(_T(".%d"), revision);\r
38                         m_versionInfo += s;\r
39                 }\r
40         }\r
41 }\r
42 \r
43 void CAboutDlg::DoDataExchange(CDataExchange *pDX)\r
44 {\r
45         CDialog::DoDataExchange(pDX);\r
46         //{{AFX_DATA_MAP(CAboutDlg)\r
47         DDX_Control(pDX, IDC_URL, m_cURL);\r
48         DDX_Text(pDX, IDC_VERSION_INFORMATION, m_versionInfo);\r
49         //}}AFX_DATA_MAP\r
50 }\r
51 \r
52 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)\r
53         //{{AFX_MSG_MAP(CAboutDlg)\r
54         ON_WM_CLOSE()\r
55         ON_BN_CLICKED(IDC_URL, OnUrl)\r
56         ON_WM_CTLCOLOR()\r
57         ON_WM_SETCURSOR()\r
58         //}}AFX_MSG_MAP\r
59 END_MESSAGE_MAP()\r
60 \r
61 /////////////////////////////////////////////////////////////////////////////\r
62 // CAboutDlg message handlers\r
63 \r
64 \r
65 void CAboutDlg::OnOK() \r
66 {\r
67         CDialog::OnOK();\r
68 }\r
69 \r
70 void CAboutDlg::OnClose() \r
71 {\r
72         CDialog::OnClose();\r
73 }\r
74 \r
75 void CAboutDlg::OnUrl() \r
76 {\r
77         CString szURL;\r
78         m_cURL.GetWindowText(szURL);\r
79 \r
80         ShellExecute(m_hWnd, NULL, szURL, NULL, NULL, SW_SHOWNORMAL);\r
81 }\r
82 \r
83 HBRUSH CAboutDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) \r
84 {\r
85         HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);\r
86 \r
87         COLORREF crBlue = RGB(0, 0, 0xff);\r
88 \r
89         if (pWnd == &m_cURL) {\r
90                 pDC->SetTextColor(crBlue);\r
91         }\r
92 \r
93         return hbr;\r
94 }\r
95 \r
96 BOOL CAboutDlg::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message) \r
97 {\r
98         CRect rect;\r
99         m_cURL.GetWindowRect(rect);\r
100 \r
101         POINT p;\r
102         ::GetCursorPos(&p);\r
103 \r
104         if (rect.PtInRect(p)) {\r
105                 HCURSOR hCursor = (HCURSOR)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_HAND_CURSOR),\r
106                                                                                          IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
107                 SetCursor(hCursor);\r
108                 return TRUE;    \r
109         }\r
110 \r
111         return CDialog::OnSetCursor(pWnd, nHitTest, message);\r
112 }\r