--- /dev/null
+// SampleApp.cpp : Defines the entry point for the application.\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "SampleApp.h"\r
+\r
+#define MAX_LOADSTRING 100\r
+\r
+// Global Variables:\r
+HINSTANCE hInst; // current instance\r
+TCHAR szTitle[MAX_LOADSTRING]; // The title bar text\r
+TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name\r
+\r
+// Forward declarations of functions included in this code module:\r
+ATOM MyRegisterClass(HINSTANCE hInstance);\r
+BOOL InitInstance(HINSTANCE, int);\r
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);\r
+INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);\r
+\r
+int APIENTRY _tWinMain(HINSTANCE hInstance,\r
+ HINSTANCE hPrevInstance,\r
+ LPTSTR lpCmdLine,\r
+ int nCmdShow)\r
+{\r
+ UNREFERENCED_PARAMETER(hPrevInstance);\r
+ UNREFERENCED_PARAMETER(lpCmdLine);\r
+\r
+ // TODO: Place code here.\r
+ MSG msg;\r
+ HACCEL hAccelTable;\r
+\r
+ // Initialize global strings\r
+ LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);\r
+ LoadString(hInstance, IDC_SAMPLEAPP, szWindowClass, MAX_LOADSTRING);\r
+ MyRegisterClass(hInstance);\r
+\r
+ // Perform application initialization:\r
+ if (!InitInstance (hInstance, nCmdShow))\r
+ {\r
+ return FALSE;\r
+ }\r
+\r
+ hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SAMPLEAPP));\r
+\r
+ // Main message loop:\r
+ while (GetMessage(&msg, NULL, 0, 0))\r
+ {\r
+ if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))\r
+ {\r
+ TranslateMessage(&msg);\r
+ DispatchMessage(&msg);\r
+ }\r
+ }\r
+\r
+ return (int) msg.wParam;\r
+}\r
+\r
+\r
+\r
+//\r
+// FUNCTION: MyRegisterClass()\r
+//\r
+// PURPOSE: Registers the window class.\r
+//\r
+// COMMENTS:\r
+//\r
+// This function and its usage are only necessary if you want this code\r
+// to be compatible with Win32 systems prior to the 'RegisterClassEx'\r
+// function that was added to Windows 95. It is important to call this function\r
+// so that the application will get 'well formed' small icons associated\r
+// with it.\r
+//\r
+ATOM MyRegisterClass(HINSTANCE hInstance)\r
+{\r
+ WNDCLASSEX wcex;\r
+\r
+ wcex.cbSize = sizeof(WNDCLASSEX);\r
+\r
+ wcex.style = CS_HREDRAW | CS_VREDRAW;\r
+ wcex.lpfnWndProc = WndProc;\r
+ wcex.cbClsExtra = 0;\r
+ wcex.cbWndExtra = 0;\r
+ wcex.hInstance = hInstance;\r
+ wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SAMPLEAPP));\r
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);\r
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);\r
+ wcex.lpszMenuName = MAKEINTRESOURCE(IDC_SAMPLEAPP);\r
+ wcex.lpszClassName = szWindowClass;\r
+ wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));\r
+\r
+ return RegisterClassEx(&wcex);\r
+}\r
+\r
+#include "SkOSWindow_Win.h"\r
+extern SkOSWindow* create_sk_window(void* hwnd);\r
+\r
+static SkOSWindow* gSkWind;\r
+\r
+//\r
+// FUNCTION: InitInstance(HINSTANCE, int)\r
+//\r
+// PURPOSE: Saves instance handle and creates main window\r
+//\r
+// COMMENTS:\r
+//\r
+// In this function, we save the instance handle in a global variable and\r
+// create and display the main program window.\r
+//\r
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)\r
+{\r
+ HWND hWnd;\r
+\r
+ hInst = hInstance; // Store instance handle in our global variable\r
+\r
+ hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,\r
+ CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);\r
+\r
+ if (!hWnd)\r
+ {\r
+ return FALSE;\r
+ }\r
+\r
+ gSkWind = create_sk_window(hWnd);\r
+\r
+ ShowWindow(hWnd, nCmdShow);\r
+ UpdateWindow(hWnd);\r
+\r
+ return TRUE;\r
+}\r
+\r
+//\r
+// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)\r
+//\r
+// PURPOSE: Processes messages for the main window.\r
+//\r
+// WM_COMMAND - process the application menu\r
+// WM_PAINT - Paint the main window\r
+// WM_DESTROY - post a quit message and return\r
+//\r
+//\r
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (message) {\r
+ case WM_COMMAND: {\r
+ int wmId = LOWORD(wParam);\r
+ int wmEvent = HIWORD(wParam);\r
+ // Parse the menu selections:\r
+ switch (wmId) {\r
+ case IDM_ABOUT:\r
+ DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);\r
+ break;\r
+ case IDM_EXIT:\r
+ DestroyWindow(hWnd);\r
+ break;\r
+ default:\r
+ return DefWindowProc(hWnd, message, wParam, lParam);\r
+ }\r
+ } break;\r
+ case WM_DESTROY:\r
+ PostQuitMessage(0);\r
+ break;\r
+ default:\r
+ if (gSkWind->wndProc(hWnd, message, wParam, lParam)) {\r
+ return 0;\r
+ } else {\r
+ return DefWindowProc(hWnd, message, wParam, lParam);\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
+// Message handler for about box.\r
+INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ UNREFERENCED_PARAMETER(lParam);\r
+ switch (message)\r
+ {\r
+ case WM_INITDIALOG:\r
+ return (INT_PTR)TRUE;\r
+\r
+ case WM_COMMAND:\r
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)\r
+ {\r
+ EndDialog(hDlg, LOWORD(wParam));\r
+ return (INT_PTR)TRUE;\r
+ }\r
+ break;\r
+ }\r
+ return (INT_PTR)FALSE;\r
+}\r