#include#include #define MAX_LOADSTRING 256 #define WM_MESSAGE_A WM_USER+1 WCHAR szTitle[MAX_LOADSTRING] = TEXT("demo"); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); VOID CALLBACK TimerProc(HWND hWnd, UINT message, UINT_PTR itimer, DWORD dwTime); bool InitInstance(HINSTANCE hInstance, int nCmdShow); ATOM RegisterWndClass(HINSTANCE hInstance); HANDLE g_hOutput = nullptr; int APIENTRY wWinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { AllocConsole(); g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE); RegisterWndClass(hInstance); if (!InitInstance(hInstance, nCmdShow)) { return -1; } MSG msg; while (TRUE) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { } } return (int)msg.wParam; } ATOM RegisterWndClass(HINSTANCE hInstance) { WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wnd.hCursor = LoadCursor(NULL, IDC_ARROW); wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION); wnd.lpfnWndProc = WndProc; wnd.lpszClassName = szTitle; wnd.lpszMenuName = NULL; wnd.style = CS_HREDRAW | CS_VREDRAW; wnd.hInstance = hInstance; return RegisterClass(&wnd); } bool InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd = CreateWindow(szTitle, L"windows", WS_OVERLAPPEDWINDOW, 0, 0, 300, 300, NULL, NULL, hInstance, NULL); if (!hWnd) return false; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return true; } void onWMCREATEMessage(HWND hWnd, WPARAM wParam) { SetTimer(hWnd, 1, 1000, TimerProc); PostMessage(hWnd, WM_MESSAGE_A, NULL, NULL); //SendMessage(hWnd, WM_MESSAGE_A, NULL, NULL); } void onWMKeyMessage(HWND hWnd, WPARAM wParam) { wchar_t szTest[256]; swprintf(szTest,256, L"WM_KEYDOWN 的值是: %dn", wParam); WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0); } void onWMCHARMessage(HWND hWnd, WPARAM wParam) { wchar_t szTest[256]; swprintf(szTest, 256, L"WM_CHAR 的值是: %dn", wParam); WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0); } void onWMTIMERMessage(HWND hWnd, WPARAM wParam) { wchar_t szTest[256]; swprintf(szTest, 256, L"WndProc WM_TIMER 的值是: %dn", wParam); WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0); } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message){ case WM_CREATE: onWMCREATEMessage(hWnd, wParam); return 0; case WM_KEYDOWN: onWMKeyMessage(hWnd, wParam); break; case WM_CHAR: onWMCHARMessage(hWnd, wParam); break; case WM_TIMER: onWMTIMERMessage(hWnd, wParam); return 0; case WM_MESSAGE_A: MessageBox(NULL, TEXT(""), TEXT(""), NULL); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: break; } return DefWindowProc(hWnd, message, wParam, lParam); } VOID CALLBACK TimerProc(HWND hWnd, UINT message, UINT_PTR itimer, DWORD dwTime) { wchar_t szTest[256]; swprintf(szTest, 256, L"TimerProc WM_TIMER 的值是: %dn", message); WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0); }



