Creating an Enhanced Metafile
This section contains an example that demonstrates the creation of an enhanced
metafile that is stored on a disk, using a filename specified by the user.
The example uses a DC for the application window as the reference DC. (Windows
stores the resolution data for this device in the enhanced-metafile's header.)
The application retrieves a handle identifying this DC by calling the
GetDC function.
The example uses the dimensions of the application's client area to define the
dimensions of the picture frame. Using the rectangle dimensions returned by
the
GetClientRect function, the application converts the device units to .01-millimeter units
and passes the converted values to the
CreateEnhMetaFile function.
The example displays a Save As common dialog box that enables the user to
specify the filename of the new enhanced metafile. The system appends the
three-character .EMF extension to this filename and passes the name to the
CreateEnhMetaFile function.
The example also embeds a text description of the picture in the
enhanced-metafile header. This description is specified as a resource in the string table of
the application's resource file. However, in a working application, this
string would be retrieved from a custom control in a common dialog box or from a
separate dialog box displayed solely for this purpose.
/* Obtain a handle to a reference DC. */
hdcRef = GetDC(hWnd);
/*
* Determine the picture frame dimensions.
* iWidthMM is the display width in millimeters.
* iHeightMM is the display height in millimeters.
* iWidthPels is the display width in pixels.
* iHeightPels is the display height in pixels
*/
iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE);
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE);
iWidthPels = GetDeviceCaps(hdcRef, HORZRES);
iHeightPels = GetDeviceCaps(hdcRef, VERTRES);
/*
* Retrieve the coordinates of the client
* rectangle, in pixels.
*/
GetClientRect(hWnd, &rect);
/*
* Convert client coordinates to .01-mm units.
* Use iWidthMM, iWidthPels, iHeightMM, and
* iHeightPels to determine the number of
* .01-millimeter units per pixel in the x-
* and y-directions.
*/
rect.left = (rect.left * iWidthMM * 100)/iWidthPels;
rect.top = (rect.top * iHeightMM * 100)/iHeightPels;
rect.right = (rect.right * iiWidthMM * 100)/iWidthPels;
rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels;
/* Load the filename filter from the string table. */
LoadString(hInst, IDS_FILTERSTRING,
(LPSTR)szFilter, sizeof(szFilter));
/*
* Replace the '%' separators that are embedded
* between the strings in the string-table entry
* with '\0'.
*/
for (i=0; szFilter[i]!='\0'; i++)
if (szFilter[i] == '%')
szFilter[i] = '\0';
/* Load the dialog title string from the table. */
LoadString(hInst, IDS_TITLESTRING,
(LPSTR)szTitle, sizeof(szTitle));
/* Initialize the OPENFILENAME members. */
szFile[0] = '\0';
Ofn.lStructSize = sizeof(OPENFILENAME);
Ofn.hwndOwner = hWnd;
Ofn.lpstrFilter = szFilter;
Ofn.lpstrFile= szFile;
Ofn.nMaxFile = sizeof(szFile);
Ofn.lpstrFileTitle = szFileTitle;
Ofn.nMaxFileTitle = sizeof(szFileTitle);
Ofn.lpstrInitialDir = (LPSTR)NULL;
Ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
Ofn.lpstrTitle = szTitle;
/*
* Display the Filename common dialog box. The
* filename specified by the user is passed
* to the CreateEnhMetaFile function and used to
* store the metafile on disk.
*/
GetSaveFileName(&Ofn);
/* Load the description from the string table. */
LoadString(hInst, IDS_DESCRIPTIONSTRING,
(LPSTR)szDescription, sizeof(szDescription));
/*
* Replace the '%' string separators that are
* embedded between strings in the string-table
* entry with '\0'.
*/
for (i=0; szDescription[i]!='\0'; i++)
if (szDescription[i] == '%')
szDescription[i] = '\0';
/* Create the metafile DC. */
hdcMeta = CreateEnhMetaFile(hdcRef,
(LPTSTR) Ofn.lpstrFile,
&rect, (LPSTR)szDescription);
if (!hdcMeta)
errhandler("CreateEnhMetaFile", hWnd);
/* Release the reference DC. */
ReleaseDC(hWnd, hdcRef);
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database