OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include <windows.h> | 8 #include <windows.h> |
9 #include <tchar.h> | 9 #include <tchar.h> |
10 | 10 |
11 #include "SkApplication.h" | 11 #include "SkApplication.h" |
12 | 12 |
13 #define MAX_LOADSTRING 100 | 13 #define MAX_LOADSTRING 100 |
14 | 14 |
15 // Global Variables: | 15 // Global Variables: |
16 HINSTANCE hInst; // current instance | 16 HINSTANCE gHInst; // current instance |
17 TCHAR szTitle[] = _T("SampleApp"); // The title bar text | 17 TCHAR gSZWindowClass[] = _T("SkiaApp"); // the main window class name |
18 TCHAR szWindowClass[] = _T("SAMPLEAPP"); // the main window class name | |
19 | 18 |
20 // Forward declarations of functions included in this code module: | 19 // Forward declarations of functions included in this code module: |
21 ATOM MyRegisterClass(HINSTANCE hInstance); | 20 ATOM MyRegisterClass(HINSTANCE hInstance); |
22 BOOL InitInstance(HINSTANCE, int, LPTSTR); | 21 BOOL InitInstance(HINSTANCE, int, LPTSTR); |
23 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); | 22 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); |
24 INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); | 23 INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); |
25 | 24 |
26 int APIENTRY _tWinMain(HINSTANCE hInstance, | 25 int APIENTRY _tWinMain(HINSTANCE hInstance, |
27 HINSTANCE hPrevInstance, | 26 HINSTANCE hPrevInstance, |
28 LPTSTR lpCmdLine, | 27 LPTSTR lpCmdLine, |
29 int nCmdShow) | 28 int nCmdShow) |
30 { | 29 { |
31 UNREFERENCED_PARAMETER(hPrevInstance); | 30 UNREFERENCED_PARAMETER(hPrevInstance); |
32 | 31 |
33 MSG msg; | 32 MSG msg; |
34 | 33 |
35 // Initialize global strings | 34 // Initialize global strings |
36 MyRegisterClass(hInstance); | 35 MyRegisterClass(hInstance); |
37 | 36 |
38 // Perform application initialization: | 37 // Perform application initialization: |
39 if (!InitInstance (hInstance, nCmdShow, lpCmdLine)) | 38 if (!InitInstance (hInstance, nCmdShow, lpCmdLine)) |
(...skipping 30 matching lines...) Expand all Loading... |
70 // function that was added to Windows 95. It is important to call this functi
on | 69 // function that was added to Windows 95. It is important to call this functi
on |
71 // so that the application will get 'well formed' small icons associated | 70 // so that the application will get 'well formed' small icons associated |
72 // with it. | 71 // with it. |
73 // | 72 // |
74 ATOM MyRegisterClass(HINSTANCE hInstance) | 73 ATOM MyRegisterClass(HINSTANCE hInstance) |
75 { | 74 { |
76 WNDCLASSEX wcex; | 75 WNDCLASSEX wcex; |
77 | 76 |
78 wcex.cbSize = sizeof(WNDCLASSEX); | 77 wcex.cbSize = sizeof(WNDCLASSEX); |
79 | 78 |
80 wcex.style = CS_HREDRAW | CS_VREDRAW; | 79 wcex.style = CS_HREDRAW | CS_VREDRAW; |
81 wcex.lpfnWndProc = WndProc; | 80 wcex.lpfnWndProc = WndProc; |
82 wcex.cbClsExtra = 0; | 81 wcex.cbClsExtra = 0; |
83 wcex.cbWndExtra = 0; | 82 wcex.cbWndExtra = 0; |
84 wcex.hInstance = hInstance; | 83 wcex.hInstance = hInstance; |
85 wcex.hIcon = NULL; | 84 wcex.hIcon = NULL; |
86 wcex.hCursor = NULL; | 85 wcex.hCursor = NULL; |
87 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); | 86 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); |
88 wcex.lpszMenuName = NULL; | 87 wcex.lpszMenuName = NULL; |
89 wcex.lpszClassName = szWindowClass; | 88 wcex.lpszClassName = gSZWindowClass; |
90 wcex.hIconSm = NULL; | 89 wcex.hIconSm = NULL; |
91 | 90 |
92 return RegisterClassEx(&wcex); | 91 return RegisterClassEx(&wcex); |
93 } | 92 } |
94 | 93 |
95 #include "SkOSWindow_Win.h" | 94 #include "SkOSWindow_Win.h" |
96 extern SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv); | 95 extern SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv); |
97 | 96 |
98 static SkOSWindow* gSkWind; | |
99 | |
100 char* tchar_to_utf8(const TCHAR* str) { | 97 char* tchar_to_utf8(const TCHAR* str) { |
101 #ifdef _UNICODE | 98 #ifdef _UNICODE |
102 int size = WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), NULL, 0, NULL,
NULL); | 99 int size = WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), NULL, 0, NULL,
NULL); |
103 char* str8 = (char*) sk_malloc_throw(size+1); | 100 char* str8 = (char*) sk_malloc_throw(size+1); |
104 WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), str8, size, NULL, NULL); | 101 WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), str8, size, NULL, NULL); |
105 str8[size] = '\0'; | 102 str8[size] = '\0'; |
106 return str8; | 103 return str8; |
107 #else | 104 #else |
108 return _strdup(str); | 105 return _strdup(str); |
109 #endif | 106 #endif |
110 } | 107 } |
111 | 108 |
112 // | 109 // |
113 // FUNCTION: InitInstance(HINSTANCE, int, LPTSTR) | 110 // FUNCTION: InitInstance(HINSTANCE, int, LPTSTR) |
114 // | 111 // |
115 // PURPOSE: Saves instance handle and creates main window | 112 // PURPOSE: Saves instance handle and creates main window |
116 // | 113 // |
117 // COMMENTS: | 114 // COMMENTS: |
118 // | 115 // |
119 // In this function, we save the instance handle in a global variable and | 116 // In this function, we save the instance handle in a global variable and |
120 // create and display the main program window. | 117 // create and display the main program window. |
121 // | 118 // |
122 | 119 |
123 | 120 |
124 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow, LPTSTR lpCmdLine) | 121 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow, LPTSTR lpCmdLine) |
125 { | 122 { |
126 application_init(); | 123 application_init(); |
127 | 124 |
128 hInst = hInstance; // Store instance handle in our global variable | 125 gHInst = hInstance; // Store instance handle in our global variable |
129 | |
130 HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, | |
131 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hIns
tance, NULL); | |
132 | |
133 if (!hWnd) | |
134 { | |
135 return FALSE; | |
136 } | |
137 | |
138 char* argv[4096]; | 126 char* argv[4096]; |
139 int argc = 0; | 127 int argc = 0; |
140 TCHAR exename[1024], *next; | 128 TCHAR exename[1024], *next; |
141 int exenameLen = GetModuleFileName(NULL, exename, SK_ARRAY_COUNT(exename)); | 129 int exenameLen = GetModuleFileName(NULL, exename, SK_ARRAY_COUNT(exename)); |
142 // we're ignoring the possibility that the exe name exceeds the exename buffe
r | 130 // we're ignoring the possibility that the exe name exceeds the exename buffe
r |
143 (void) exenameLen; | 131 (void) exenameLen; |
144 argv[argc++] = tchar_to_utf8(exename); | 132 argv[argc++] = tchar_to_utf8(exename); |
145 TCHAR* arg = _tcstok_s(lpCmdLine, _T(" "), &next); | 133 TCHAR* arg = _tcstok_s(lpCmdLine, _T(" "), &next); |
146 while (arg != NULL) { | 134 while (arg != NULL) { |
147 argv[argc++] = tchar_to_utf8(arg); | 135 argv[argc++] = tchar_to_utf8(arg); |
148 arg = _tcstok_s(NULL, _T(" "), &next); | 136 arg = _tcstok_s(NULL, _T(" "), &next); |
149 } | 137 } |
150 | 138 |
151 gSkWind = create_sk_window(hWnd, argc, argv); | 139 SkOSWindow::WindowInit winInit; |
| 140 winInit.fInstance = gHInst; |
| 141 winInit.fClass = gSZWindowClass; |
| 142 |
| 143 create_sk_window(&winInit, argc, argv); |
152 for (int i = 0; i < argc; ++i) { | 144 for (int i = 0; i < argc; ++i) { |
153 sk_free(argv[i]); | 145 sk_free(argv[i]); |
154 } | 146 } |
155 ShowWindow(hWnd, nCmdShow); | 147 SkOSWindow::ForAllWindows([nCmdShow](void* hWnd, SkOSWindow**){ |
156 UpdateWindow(hWnd); | 148 ShowWindow((HWND)hWnd, nCmdShow); |
| 149 UpdateWindow((HWND)hWnd); } |
| 150 ); |
157 | 151 |
158 return TRUE; | 152 return TRUE; |
159 } | 153 } |
160 | 154 |
161 // | 155 // |
162 // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) | 156 // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) |
163 // | 157 // |
164 // PURPOSE: Processes messages for the main window. | 158 // PURPOSE: Processes messages for the main window. |
165 // | 159 // |
166 // WM_COMMAND - process the application menu | 160 // WM_COMMAND - process the application menu |
167 // WM_PAINT - Paint the main window | 161 // WM_PAINT - Paint the main window |
168 // WM_DESTROY - post a quit message and return | 162 // WM_DESTROY - post a quit message and return |
169 // | 163 // |
170 // | 164 // |
171 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | 165 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
172 { | 166 { |
173 switch (message) { | 167 switch (message) { |
174 case WM_COMMAND: | 168 case WM_COMMAND: |
175 return DefWindowProc(hWnd, message, wParam, lParam); | |
176 case WM_DESTROY: | |
177 PostQuitMessage(0); | |
178 break; | |
179 default: | |
180 if (gSkWind->wndProc(hWnd, message, wParam, lParam)) { | |
181 return 0; | |
182 } else { | |
183 return DefWindowProc(hWnd, message, wParam, lParam); | 169 return DefWindowProc(hWnd, message, wParam, lParam); |
| 170 case WM_DESTROY: |
| 171 PostQuitMessage(0); |
| 172 break; |
| 173 default: { |
| 174 SkOSWindow* window = SkOSWindow::GetOSWindowForHWND(hWnd); |
| 175 if (window && window->wndProc(hWnd, message, wParam, lParam)) { |
| 176 return 0; |
| 177 } else { |
| 178 return DefWindowProc(hWnd, message, wParam, lParam); |
| 179 } |
184 } | 180 } |
185 } | 181 } |
186 return 0; | 182 return 0; |
187 } | 183 } |
188 | 184 |
189 // Message handler for about box. | 185 // Message handler for about box. |
190 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) | 186 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) |
191 { | 187 { |
192 UNREFERENCED_PARAMETER(lParam); | 188 UNREFERENCED_PARAMETER(lParam); |
193 switch (message) | 189 switch (message) |
194 { | 190 { |
195 case WM_INITDIALOG: | 191 case WM_INITDIALOG: |
196 return (INT_PTR)TRUE; | 192 return (INT_PTR)TRUE; |
197 | 193 |
198 case WM_COMMAND: | 194 case WM_COMMAND: |
199 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) | 195 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) |
200 { | 196 { |
201 EndDialog(hDlg, LOWORD(wParam)); | 197 EndDialog(hDlg, LOWORD(wParam)); |
202 return (INT_PTR)TRUE; | 198 return (INT_PTR)TRUE; |
203 } | 199 } |
204 break; | 200 break; |
205 } | 201 } |
206 return (INT_PTR)FALSE; | 202 return (INT_PTR)FALSE; |
207 } | 203 } |
OLD | NEW |