#include <windows.h> // 窗口过程函数 LRESULT CALLBACK MyWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage (0); return 0; case WM_PAINT: PAINTSTRUCT ps; HDC hDC = BeginPaint (hwnd, &ps); Ellipse (hDC, 100, 100, 400, 400); EndPaint (hwnd, &ps); break; } return DefWindowProc (hwnd, uMsg, wParam, lParam); } // 设置并注册窗口类 ATOM InitApplication (HINSTANCE hInstance) { WNDCLASSEX wcs; wcs.cbSize = sizeof (wcs); wcs.cbWndExtra = 0; wcs.cbClsExtra = 0; wcs.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH); wcs.hCursor = LoadCursor (hInstance , IDC_CROSS); wcs.hIcon = LoadIcon (hInstance, IDI_INFORMATION); wcs.hIconSm = LoadIcon (hInstance, IDI_QUESTION); wcs.hInstance = hInstance; wcs.lpfnWndProc = MyWndProc; wcs.style = CS_VREDRAW | CS_HREDRAW; wcs.lpszMenuName = NULL; wcs.lpszClassName = "WinHello"; return RegisterClassEx (&wcs); } // 创建、显示和更新窗口 BOOL InitInstance (HINSTANCE hInstance, int nCmdShow) { HWND hMainWnd = CreateWindowEx ( 0, "WinHello", "MyWinHello", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (! hMainWnd) return FALSE; ShowWindow (hMainWnd, nCmdShow); UpdateWindow (hMainWnd); return TRUE; } // 主函数: 消息循环是重点 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrecInstance, LPSTR lpCmdLine, int nShowCmd) { if (! InitApplication (hInstance)) return 0; if (! InitInstance (hInstance, nShowCmd)) return 0; MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; }