Displaying Graphics Example

#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const wchar_t CLASS_NAME[] = L"WindowClass"; WNDCLASSEXW wc = {0}; MSG msg; // Register the window class wc.cbSize = sizeof(WNDCLASSEXW); wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); wc.lpszClassName = CLASS_NAME; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassExW(&wc)) return 0; HWND hwnd = CreateWindowExW( WS_EX_CLIENTEDGE, CLASS_NAME, L"Graphics Demo", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 680, 290, NULL, NULL, hInstance, NULL); if (!hwnd) return 0; while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return static_cast<int>(msg.wParam); } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static const POINT polygon[5] = { {80,185}, {145,185}, {155,130}, {115,145}, {80,135} }; static const POINT bezier[4] = { {320,180}, {370,180}, {375,130}, {400,130} }; switch (msg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); int savedDC = SaveDC(hdc); // Draw border MoveToEx(hdc, 50, 10, NULL); LineTo(hdc, 620, 10); LineTo(hdc, 620, 240); LineTo(hdc, 50, 240); LineTo(hdc, 50, 10); // Default ellipse Ellipse(hdc, 80, 30, 170, 90); TextOutW(hdc, 100, 95, L"Ellipse", 7); // Green brush HBRUSH greenBrush = CreateSolidBrush(RGB(0,255,0)); SelectObject(hdc, greenBrush); RoundRect(hdc, 200,30,290,90,15,20); TextOutW(hdc,180,95, L"Rounded rectangle",17); // Yellow hatch brush HBRUSH yellowBrush = CreateHatchBrush(HS_CROSS, RGB(255,255,0)); SelectObject(hdc, yellowBrush); Chord(hdc, 320,30, 410,90, 320,45, 410,45); TextOutW(hdc,350,95,L"Chord",5); // White brush HBRUSH whiteBrush = CreateSolidBrush(RGB(255,255,255)); SelectObject(hdc, whiteBrush); Pie(hdc, 450,30, 540,90, 320,45, 410,45); TextOutW(hdc,485,95,L"Pie",3); // Red hatch brush HBRUSH redBrush = CreateHatchBrush(HS_VERTICAL, RGB(255,0,0)); SelectObject(hdc, redBrush); Polygon(hdc, polygon, 5); TextOutW(hdc,100,195, L"Polygon",7); // Black brush HBRUSH blackBrush = CreateSolidBrush(RGB(0,0,0)); SelectObject(hdc, blackBrush); Rectangle(hdc, 200,130, 280,180); TextOutW(hdc,210,195, L"Rectangle",9); // Bezier curve PolyBezier(hdc, bezier, 4); TextOutW(hdc,340,195, L"Bezier",6); // Blue dashed pen HPEN bluePen = CreatePen(PS_DASH, 1, RGB(0,0,255)); SelectObject(hdc, bluePen); MoveToEx(hdc,450,130,NULL); LineTo(hdc,540,130); // Magenta dotted pen HPEN magentaPen = CreatePen(PS_DOT, 1, RGB(255,0,255)); SelectObject(hdc, magentaPen); MoveToEx(hdc,450,155,NULL); LineTo(hdc,540,155); // Red dash-dot-dot pen HPEN redPen = CreatePen(PS_DASHDOTDOT, 1, RGB(255,0,0)); SelectObject(hdc, redPen); MoveToEx(hdc,450,180,NULL); LineTo(hdc,540,180); TextOutW(hdc,480,195, L"Lines",5); // Restore original pen/brush/font RestoreDC(hdc, savedDC); // Delete created GDI objects DeleteObject(greenBrush); DeleteObject(yellowBrush); DeleteObject(whiteBrush); DeleteObject(redBrush); DeleteObject(blackBrush); DeleteObject(bluePen); DeleteObject(magentaPen); DeleteObject(redPen); EndPaint(hwnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProcW(hwnd, msg, wParam, lParam); }