OSDN Git Service

Add descriptions of recent changes to doc/release{,_J}.txt.
[xkeymacs/xkeymacs.git] / xkeymacs / about.cpp
1 #include "stdafx.h"\r
2 #include "about.h"\r
3 \r
4 /////////////////////////////////////////////////////////////////////////////\r
5 // CAboutDlg dialog used for App About\r
6 \r
7 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)\r
8 {\r
9         //{{AFX_DATA_INIT(CAboutDlg)\r
10         m_szVersionInformation = _T("");\r
11         m_szLegalCopyright = _T("");\r
12         //}}AFX_DATA_INIT\r
13 \r
14         m_szLegalCopyright.Format(_T("Copyright (C) 2001-2006"));       // rough\r
15 \r
16         WORD wMajorVersion              = 0;\r
17         WORD wMinorVersion              = 0;\r
18         WORD wBuildVersion              = 0;\r
19         WORD wRevisionVersion   = 0;\r
20 \r
21         TCHAR szFileName[MAX_PATH] = {'\0'};\r
22         GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
23         DWORD dwHandle = 0;\r
24 \r
25         DWORD dwLen = GetFileVersionInfoSize(szFileName, &dwHandle);\r
26         if (dwLen) {\r
27                 LPVOID lpData = new BYTE[dwLen];\r
28                 if (GetFileVersionInfo(szFileName, dwHandle, dwLen, lpData)) {\r
29                         VS_FIXEDFILEINFO *pInfo;\r
30                         UINT uLen;\r
31                         if (VerQueryValue(lpData, _T("\\"), (LPVOID *)&pInfo, &uLen)) {\r
32                                 wMajorVersion           = (WORD)((pInfo->dwProductVersionMS >> 16) & 0xffff);\r
33                                 wMinorVersion           = (WORD)((pInfo->dwProductVersionMS      ) & 0xffff);\r
34                                 wBuildVersion           = (WORD)((pInfo->dwProductVersionLS >> 16) & 0xffff);\r
35                                 wRevisionVersion        = (WORD)((pInfo->dwProductVersionLS      ) & 0xffff);\r
36                         }\r
37 \r
38                         struct Translate {\r
39                                 WORD wLanguage;\r
40                                 WORD wCodePage;\r
41                         } *lpTranslate = NULL;\r
42                         UINT cbTranslate = 0;\r
43                         if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, &cbTranslate) && sizeof(*lpTranslate) <= cbTranslate) {\r
44                                 LPVOID lpLegalCopyright = NULL;\r
45                                 UINT uLen = 0;\r
46                                 CString SubBlock;\r
47 \r
48                                 SubBlock.Format(_T("\\StringFileInfo\\%04x%04x\\LegalCopyright"), lpTranslate->wLanguage, lpTranslate->wCodePage);\r
49                                 if (VerQueryValue(lpData, SubBlock.GetBuffer(SubBlock.GetLength()), (LPVOID *)&lpLegalCopyright, &uLen) && uLen) {\r
50                                         m_szLegalCopyright.Format(_T("%s"), lpLegalCopyright);\r
51                                 }\r
52                         }\r
53                 }\r
54                 delete[] lpData;\r
55                 lpData = NULL;\r
56         }\r
57 \r
58         m_szVersionInformation.Format(_T("%s Version %d.%d"), CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), wMajorVersion, wMinorVersion);\r
59 \r
60         if (wBuildVersion) {\r
61                 CString sz;\r
62                 sz.Format(_T(".%d"), wBuildVersion);\r
63                 m_szVersionInformation += sz;\r
64 \r
65                 if (wRevisionVersion) {\r
66                         CString sz;\r
67                         sz.Format(_T(".%d"), wRevisionVersion);\r
68                         m_szVersionInformation += sz;\r
69                 }\r
70         }\r
71 }\r
72 \r
73 void CAboutDlg::DoDataExchange(CDataExchange *pDX)\r
74 {\r
75         CDialog::DoDataExchange(pDX);\r
76         //{{AFX_DATA_MAP(CAboutDlg)\r
77         DDX_Control(pDX, IDC_URL, m_cURL);\r
78         DDX_Text(pDX, IDC_VERSION_INFORMATION, m_szVersionInformation);\r
79         DDX_Text(pDX, IDC_LEGAL_COPYRIGHT, m_szLegalCopyright);\r
80         //}}AFX_DATA_MAP\r
81 }\r
82 \r
83 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)\r
84         //{{AFX_MSG_MAP(CAboutDlg)\r
85         ON_WM_CLOSE()\r
86         ON_BN_CLICKED(IDC_URL, OnUrl)\r
87         ON_WM_CTLCOLOR()\r
88         ON_WM_SETCURSOR()\r
89         //}}AFX_MSG_MAP\r
90 END_MESSAGE_MAP()\r
91 \r
92 /////////////////////////////////////////////////////////////////////////////\r
93 // CAboutDlg message handlers\r
94 \r
95 \r
96 void CAboutDlg::OnOK() \r
97 {\r
98         CDialog::OnOK();\r
99 }\r
100 \r
101 void CAboutDlg::OnClose() \r
102 {\r
103         CDialog::OnClose();\r
104 }\r
105 \r
106 void CAboutDlg::OnUrl() \r
107 {\r
108         CString szURL;\r
109         m_cURL.GetWindowText(szURL);\r
110 \r
111         ShellExecute(m_hWnd, NULL, szURL, NULL, NULL, SW_SHOWNORMAL);\r
112 }\r
113 \r
114 HBRUSH CAboutDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) \r
115 {\r
116         HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);\r
117 \r
118         COLORREF crBlue = RGB(0, 0, 0xff);\r
119 \r
120         if (pWnd == &m_cURL) {\r
121                 pDC->SetTextColor(crBlue);\r
122         }\r
123 \r
124         return hbr;\r
125 }\r
126 \r
127 BOOL CAboutDlg::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message) \r
128 {\r
129         CRect rect;\r
130         m_cURL.GetWindowRect(rect);\r
131 \r
132         POINT p;\r
133         ::GetCursorPos(&p);\r
134 \r
135         if (rect.PtInRect(p)) {\r
136                 HCURSOR hCursor = (HCURSOR)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_HAND_CURSOR),\r
137                                                                                          IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
138                 SetCursor(hCursor);\r
139                 return TRUE;    \r
140         }\r
141 \r
142         return CDialog::OnSetCursor(pWnd, nHitTest, message);\r
143 }\r