#include #include LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) { // Register the window class. const wchar_t CLASS_NAME[] = L"Sample Window Class"; WNDCLASS wc = { }; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L"Learn to Program Windows", // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL) { return 0; } ShowWindow(hwnd, nCmdShow); // Run the message loop. MSG msg = { }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { wchar_t msg[32]; switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1)); EndPaint(hwnd, &ps); } return 0; case WM_SYSKEYDOWN: swprintf_s(msg, L"WM_SYSKEYDOWN: 0x%x\n", wParam); OutputDebugString(msg); break; case WM_SYSCHAR: swprintf_s(msg, L"WM_SYSCHAR: %c\n", (wchar_t)wParam); OutputDebugString(msg); break; case WM_SYSKEYUP: swprintf_s(msg, L"WM_SYSKEYUP: 0x%x\n", wParam); OutputDebugString(msg); break; case WM_KEYDOWN: swprintf_s(msg, L"WM_KEYDOWN: 0x%x\n", wParam); OutputDebugString(msg); break; case WM_KEYUP: swprintf_s(msg, L"WM_KEYUP: 0x%x\n", wParam); OutputDebugString(msg); break; case WM_CHAR: swprintf_s(msg, L"WM_CHAR: %c\n", (wchar_t)wParam); OutputDebugString(msg); break; } return DefWindowProc(hwnd, uMsg, wParam, lParam); }