static void DoOpenFile(LPCWSTR filename) { if (!filename) return; isAldus = FileIsPlaceable(filename); if (isAldus) { hmf = GetPlaceableMetaFile(filename); } else { RECT r; isEnhanced = FileIsEnhanced(filename); if (isEnhanced) enhmf = GetEnhMetaFileW(filename); else hmf = GetMetaFileW(filename); GetClientRect(hMainWnd, &r); width = r.right - r.left; height = r.bottom - r.top; } InvalidateRect( hMainWnd, NULL, TRUE ); }
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam) { switch (uMessage) { case WM_PAINT: { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); SetMapMode(ps.hdc, MM_ANISOTROPIC); /* Set the window extent to a sane value in case the metafile doesn't */ SetWindowExtEx(ps.hdc, width, height, NULL); SetViewportExtEx(ps.hdc, width, height, NULL); SetViewportOrgEx(ps.hdc, deltax, deltay, NULL); if(hmf) PlayMetaFile(ps.hdc, hmf); EndPaint(hwnd, &ps); } break; case WM_COMMAND: /* message: command from application menu */ switch (GET_WM_COMMAND_ID(wparam,lparam)) { case IDM_OPEN: { char filename[MAX_PATH]; if (FileOpen(hwnd, filename, sizeof(filename))) { isAldus = FileIsPlaceable(filename); if (isAldus) { hmf = GetPlaceableMetaFile(hwnd, filename); } else { RECT r; hmf = GetMetaFile(filename); GetClientRect(hwnd, &r); width = r.right - r.left; height = r.bottom - r.top; } InvalidateRect( hwnd, NULL, TRUE ); } } break; case IDM_SET_EXT_TO_WIN: { RECT r; GetClientRect(hwnd, &r); width = r.right - r.left; height = r.bottom - r.top; deltax = deltay = 0; InvalidateRect( hwnd, NULL, TRUE ); } break; case IDM_LEFT: deltax += 100; InvalidateRect( hwnd, NULL, TRUE ); break; case IDM_RIGHT: deltax -= 100; InvalidateRect( hwnd, NULL, TRUE ); break; case IDM_UP: deltay += 100; InvalidateRect( hwnd, NULL, TRUE ); break; case IDM_DOWN: deltay -= 100; InvalidateRect( hwnd, NULL, TRUE ); break; case IDM_EXIT: DestroyWindow(hwnd); break; default: return DefWindowProc(hwnd, uMessage, wparam, lparam); } break; case WM_DESTROY: /* message: window being destroyed */ PostQuitMessage(0); break; default: /* Passes it on if unprocessed */ return DefWindowProc(hwnd, uMessage, wparam, lparam); } return 0; }