Mapping Modes 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"Mapping Demo", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 680, 290, NULL, NULL, hInstance, NULL); if (!hwnd) return 0; // Message loop while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return static_cast<int>(msg.wParam); } // Window procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_PAINT: { PAINTSTRUCT ps; HDC dc = BeginPaint(hwnd, &ps); int savedDC = SaveDC(dc); // Create the pens HPEN redPen = CreatePen(PS_SOLID, 1, RGB(255,0,0)); HPEN bluePen = CreatePen(PS_SOLID, 1, RGB(0,0,255)); HPEN magentaPen = CreatePen(PS_SOLID, 1, RGB(255,0,255)); HPEN dashPen = CreatePen(PS_DASH, 1, RGB(0,0,255)); // Default rectangle (MM_TEXT) Rectangle(dc, 100, 100, 300, 300); // MM_HIMETRIC SelectObject(dc, redPen); SetMapMode(dc, MM_HIMETRIC); Rectangle(dc, 100, -100, 300, -300); // MM_LOMETRIC SelectObject(dc, bluePen); SetMapMode(dc, MM_LOMETRIC); Rectangle(dc, 100, -100, 300, -300); // MM_LOENGLISH SelectObject(dc, magentaPen); SetMapMode(dc, MM_LOENGLISH); Rectangle(dc, 100, -100, 300, -300); // MM_ANISOTROPIC SelectObject(dc, dashPen); SetMapMode(dc, MM_ANISOTROPIC); SetWindowExtEx(dc, 1, 10, NULL); SetViewportExtEx(dc, 1, 1, NULL); Rectangle(dc, 100, 300, 300, 500); // Restore original DC RestoreDC(dc, savedDC); // Delete created pens DeleteObject(redPen); DeleteObject(bluePen); DeleteObject(magentaPen); DeleteObject(dashPen); EndPaint(hwnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProcW(hwnd, msg, wParam, lParam); }