OSDN Git Service

Remove TODO comments, some lines commented out.
[xkeymacs/xkeymacs.git] / xkeymacs / xkeymacs.cpp
1 // xkeymacs.cpp : Defines the class behaviors for the application.\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "xkeymacs.h"\r
6 #include "Profile.h"\r
7 #include "MainFrm.h"\r
8 \r
9 #ifdef _DEBUG\r
10 #define new DEBUG_NEW\r
11 #undef THIS_FILE\r
12 static char THIS_FILE[] = __FILE__;\r
13 #endif\r
14 \r
15 /////////////////////////////////////////////////////////////////////////////\r
16 // CXkeymacsApp\r
17 \r
18 BEGIN_MESSAGE_MAP(CXkeymacsApp, CWinApp)\r
19         //{{AFX_MSG_MAP(CXkeymacsApp)\r
20         ON_COMMAND(ID_APP_ABOUT, OnAppAbout)\r
21                 // NOTE - the ClassWizard will add and remove mapping macros here.\r
22                 //    DO NOT EDIT what you see in these blocks of generated code!\r
23         //}}AFX_MSG_MAP\r
24         // Standard file based document commands\r
25         ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)\r
26         ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)\r
27 END_MESSAGE_MAP()\r
28 \r
29 /////////////////////////////////////////////////////////////////////////////\r
30 // CXkeymacsApp construction\r
31 \r
32 CXkeymacsApp::CXkeymacsApp()\r
33 {\r
34         m_Instance = FirstInstance;\r
35 }\r
36 \r
37 /////////////////////////////////////////////////////////////////////////////\r
38 // The one and only CXkeymacsApp object\r
39 \r
40 CXkeymacsApp theApp;\r
41 \r
42 /////////////////////////////////////////////////////////////////////////////\r
43 // CXkeymacsApp initialization\r
44 \r
45 BOOL CXkeymacsApp::InitInstance()\r
46 {\r
47 //      AfxEnableControlContainer();\r
48 \r
49         // Standard initialization\r
50         // If you are not using these features and wish to reduce the size\r
51         //  of your final executable, you should remove from the following\r
52         //  the specific initialization routines you do not need.\r
53 #ifdef _WIN64\r
54         m_hMutex = CreateMutex(FALSE, 0, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)) + _T("64"));\r
55 #else\r
56         m_hMutex = CreateMutex(FALSE, 0, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)));\r
57 #endif\r
58 \r
59     if (::GetLastError() == ERROR_ALREADY_EXISTS) {\r
60                 m_Instance = SecondInstance;\r
61         CloseHandle( m_hMutex );\r
62         return FALSE;\r
63     }\r
64 \r
65 #ifdef _AFXDLL\r
66         Enable3dControls();                     // Call this when using MFC in a shared DLL\r
67 #else\r
68         Enable3dControlsStatic();       // Call this when linking to MFC statically\r
69 #endif\r
70 \r
71         // Change the registry key under which our settings are stored.\r
72         SetRegistryKey(IDS_REGISTRY_KEY);\r
73 //\r
74 //      LoadStdProfileSettings();  // Load standard INI file options (including MRU)\r
75 \r
76         // Parse command line for standard shell commands, DDE, file open\r
77 //      CCommandLineInfo cmdInfo;\r
78 //      ParseCommandLine(cmdInfo);\r
79 \r
80         // Dispatch commands specified on the command line\r
81 //      if (!ProcessShellCommand(cmdInfo))\r
82 //              return FALSE;\r
83 \r
84         // The one and only window has been initialized, so show and update it.\r
85         m_pMainWnd = new CMainFrame;\r
86         m_pMainWnd->ShowWindow(SW_HIDE);\r
87         m_pMainWnd->UpdateWindow();\r
88         SetClassLongPtr(m_pMainWnd->m_hWnd, GCLP_HICON, (LONG_PTR)LoadIcon(IDR_MAINFRAME));\r
89 \r
90         // set registry key\r
91         CProfile::InitDllData();\r
92 \r
93         return TRUE;\r
94 }\r
95 \r
96 \r
97 /////////////////////////////////////////////////////////////////////////////\r
98 // CAboutDlg dialog used for App About\r
99 \r
100 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)\r
101 {\r
102         //{{AFX_DATA_INIT(CAboutDlg)\r
103         m_szVersionInformation = _T("");\r
104         m_szLegalCopyright = _T("");\r
105         //}}AFX_DATA_INIT\r
106 \r
107         m_szLegalCopyright.Format(_T("Copyright (C) 2001-2006"));       // rough\r
108 \r
109         WORD wMajorVersion              = 0;\r
110         WORD wMinorVersion              = 0;\r
111         WORD wBuildVersion              = 0;\r
112         WORD wRevisionVersion   = 0;\r
113 \r
114         TCHAR szFileName[MAX_PATH] = {'\0'};\r
115         GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
116         DWORD dwHandle = 0;\r
117 \r
118         DWORD dwLen = GetFileVersionInfoSize(szFileName, &dwHandle);\r
119         if (dwLen) {\r
120                 LPVOID lpData = new BYTE[dwLen];\r
121                 if (GetFileVersionInfo(szFileName, dwHandle, dwLen, lpData)) {\r
122                         VS_FIXEDFILEINFO *pInfo;\r
123                         UINT uLen;\r
124                         if (VerQueryValue(lpData, _T("\\"), (LPVOID *)&pInfo, &uLen)) {\r
125                                 wMajorVersion           = (WORD)((pInfo->dwProductVersionMS >> 16) & 0xffff);\r
126                                 wMinorVersion           = (WORD)((pInfo->dwProductVersionMS      ) & 0xffff);\r
127                                 wBuildVersion           = (WORD)((pInfo->dwProductVersionLS >> 16) & 0xffff);\r
128                                 wRevisionVersion        = (WORD)((pInfo->dwProductVersionLS      ) & 0xffff);\r
129                         }\r
130 \r
131                         Translate_t *lpTranslate = NULL;\r
132                         UINT cbTranslate = 0;\r
133                         if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, &cbTranslate) && sizeof(Translate_t) <= cbTranslate) {\r
134                                 LPVOID lpLegalCopyright = NULL;\r
135                                 UINT uLen = 0;\r
136                                 CString SubBlock;\r
137 \r
138                                 SubBlock.Format(_T("\\StringFileInfo\\%04x%04x\\LegalCopyright"), lpTranslate->wLanguage, lpTranslate->wCodePage);\r
139                                 if (VerQueryValue(lpData, SubBlock.GetBuffer(SubBlock.GetLength()), (LPVOID *)&lpLegalCopyright, &uLen) && uLen) {\r
140                                         m_szLegalCopyright.Format(_T("%s"), lpLegalCopyright);\r
141                                 }\r
142                         }\r
143                 }\r
144                 delete[] lpData;\r
145                 lpData = NULL;\r
146         }\r
147 \r
148         m_szVersionInformation.Format(_T("%s Version %d.%d"), CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), wMajorVersion, wMinorVersion);\r
149 \r
150         if (wBuildVersion) {\r
151                 CString sz;\r
152                 sz.Format(_T(".%d"), wBuildVersion);\r
153                 m_szVersionInformation += sz;\r
154 \r
155                 if (wRevisionVersion) {\r
156                         CString sz;\r
157                         sz.Format(_T(".%d"), wRevisionVersion);\r
158                         m_szVersionInformation += sz;\r
159                 }\r
160         }\r
161 }\r
162 \r
163 void CAboutDlg::DoDataExchange(CDataExchange *pDX)\r
164 {\r
165         CDialog::DoDataExchange(pDX);\r
166         //{{AFX_DATA_MAP(CAboutDlg)\r
167         DDX_Control(pDX, IDC_URL, m_cURL);\r
168         DDX_Text(pDX, IDC_VERSION_INFORMATION, m_szVersionInformation);\r
169         DDX_Text(pDX, IDC_LEGAL_COPYRIGHT, m_szLegalCopyright);\r
170         //}}AFX_DATA_MAP\r
171 }\r
172 \r
173 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)\r
174         //{{AFX_MSG_MAP(CAboutDlg)\r
175         ON_WM_CLOSE()\r
176         ON_BN_CLICKED(IDC_URL, OnUrl)\r
177         ON_WM_CTLCOLOR()\r
178         ON_WM_SETCURSOR()\r
179         //}}AFX_MSG_MAP\r
180 END_MESSAGE_MAP()\r
181 \r
182 // App command to run the dialog\r
183 void CXkeymacsApp::OnAppAbout()\r
184 {\r
185         CAboutDlg aboutDlg;\r
186         aboutDlg.DoModal();\r
187 }\r
188 \r
189 /////////////////////////////////////////////////////////////////////////////\r
190 // CXkeymacsApp message handlers\r
191 \r
192 \r
193 int CXkeymacsApp::ExitInstance() \r
194 {\r
195         if (m_Instance == FirstInstance) {\r
196             ReleaseMutex( m_hMutex );\r
197                 CloseHandle( m_hMutex );\r
198 \r
199                 m_pMainWnd->DestroyWindow();\r
200                 delete m_pMainWnd;\r
201                 m_pMainWnd = NULL;\r
202         }\r
203 \r
204         return CWinApp::ExitInstance();\r
205 }\r
206 \r
207 void CAboutDlg::OnOK() \r
208 {\r
209         CDialog::OnOK();\r
210 }\r
211 \r
212 \r
213 void CAboutDlg::OnClose() \r
214 {\r
215         CDialog::OnClose();\r
216 }\r
217 \r
218 void CAboutDlg::OnUrl() \r
219 {\r
220         CString szURL;\r
221         m_cURL.GetWindowText(szURL);\r
222 \r
223         ShellExecute(m_hWnd, NULL, szURL, NULL, NULL, SW_SHOWNORMAL);\r
224 }\r
225 \r
226 HBRUSH CAboutDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) \r
227 {\r
228         HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);\r
229 \r
230         COLORREF crBlue = RGB(0, 0, 0xff);\r
231 \r
232         if (pWnd == &m_cURL) {\r
233                 pDC->SetTextColor(crBlue);\r
234         }\r
235 \r
236         return hbr;\r
237 }\r
238 \r
239 BOOL CAboutDlg::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message) \r
240 {\r
241         CRect rect;\r
242         m_cURL.GetWindowRect(rect);\r
243 \r
244         POINT p;\r
245         ::GetCursorPos(&p);\r
246 \r
247         if (rect.PtInRect(p)) {\r
248                 HCURSOR hCursor = (HCURSOR)LoadImage(theApp.m_hInstance, MAKEINTRESOURCE(IDC_HAND_CURSOR),\r
249                                                                                          IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
250                 SetCursor(hCursor);\r
251                 return TRUE;    \r
252         }\r
253 \r
254         return CDialog::OnSetCursor(pWnd, nHitTest, message);\r
255 }\r