Otwieranie rozszerzonego metapliku i wyświetlanie jego zawartości
Ta sekcja zawiera przykład pokazujący, jak aplikacja otwiera rozszerzony metaplik przechowywany na dysku i wyświetla skojarzony obraz w obszarze klienta.
W przykładzie użyto Otwórz typowe okno dialogowe, aby umożliwić użytkownikowi wybranie rozszerzonego metapliku z listy istniejących plików. Następnie przekazuje nazwę wybranego pliku do funkcji GetEnhMetaFile, która zwraca uchwyt identyfikujący plik. Ten uchwyt jest przekazywany do funkcji PlayEnhMetaFile, aby wyświetlić obraz.
LoadString(hInst, IDS_FILTERSTRING,
(LPSTR)szFilter, sizeof(szFilter));
// Replace occurrences of '%' string separator
// with '\0'.
for (i=0; szFilter[i]!='\0'; i++)
{
if (szFilter[i] == '%')
szFilter[i] = '\0';
}
LoadString(hInst, IDS_DEFEXTSTRING,
(LPSTR)szDefExt, sizeof(szFilter));
// Use the OpenFilename common dialog box
// to obtain the desired filename.
szFile[0] = '\0';
OPENFILENAME Ofn;
Ofn.lStructSize = sizeof(OPENFILENAME);
Ofn.hwndOwner = hWnd;
Ofn.lpstrFilter = szFilter;
Ofn.lpstrCustomFilter = (LPSTR)NULL;
Ofn.nMaxCustFilter = 0L;
Ofn.nFilterIndex = 1L;
Ofn.lpstrFile = szFile;
Ofn.nMaxFile = sizeof(szFile);
Ofn.lpstrFileTitle = szFileTitle;
Ofn.nMaxFileTitle = sizeof(szFileTitle);
Ofn.lpstrInitialDir = (LPSTR) NULL;
Ofn.lpstrTitle = (LPSTR)NULL;
Ofn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
Ofn.nFileOffset = 0;
Ofn.nFileExtension = 0;
Ofn.lpstrDefExt = szDefExt;
GetOpenFileName(&Ofn);
// Open the metafile.
HENHMETAFILE hemf = GetEnhMetaFile(Ofn.lpstrFile);
// Retrieve a handle to a window device context.
HDC hDC = GetDC(hWnd);
// Retrieve the client rectangle dimensions.
GetClientRect(hWnd, &rct);
// Draw the picture.
PlayEnhMetaFile(hDC, hemf, &rct);
// Release the metafile handle.
DeleteEnhMetaFile(hemf);
// Release the window DC.
ReleaseDC(hWnd, hDC);