上一个程序使用的元文件的PlayMetaFile不能指定显示位置,增强的元文件解决了这一麻烦。
这个程序也有一定的问题,两条线的起点和重点可能跟矩形的顶点不在一个位置。
1.1.main.c
#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); TCHAR szAppName[] = TEXT("EMF1"); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; if (!RegisterClass(&wndclass)) { MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppName, TEXT("Enhanced Metafile Demo #1"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HENHMETAFILE hemf; HDC hdc, hdcEMF; PAINTSTRUCT ps; RECT rect; switch (message) { case WM_CREATE: // 创建内存增强元文件,最简单的方式 hdcEMF = CreateEnhMetaFile(NULL, NULL, NULL, NULL); Rectangle(hdcEMF, 100, 100, 200, 200); MoveToEx(hdcEMF, 100, 100, NULL); LineTo(hdcEMF, 200, 200); MoveToEx(hdcEMF, 200, 100, NULL); LineTo(hdcEMF, 100, 200); // 关闭元文件,获得句柄 hemf = CloseEnhMetaFile(hdcEMF); return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); rect.left = rect.right / 4; rect.right = 3 * rect.right / 4; rect.top = rect.bottom / 4; rect.bottom = 3 * rect.bottom / 4; // 显示 PlayEnhMetaFile(hdc, hemf, &rect); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: // 删除 DeleteEnhMetaFile(hemf); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }
欢迎转载,请保留出处与链接。Ocrosoft » [Win32]增强型元文件