本节包含一个示例,演示如何使用用户指定的文件来创建存储在磁盘上的增强型图元文件。
该示例使用DC作为应用程序窗口作为参考DC。(Windows将此设备的分辨率数据存储在增强型图元文件的头中。)应用程序通过调用GetDC功能检索标识此DC的句柄。
该示例使用应用程序的客户区域的维度来定义图片框架的尺寸。使用GetClientRect函数返回的矩形尺寸,应用程序将设备单位转换为.01毫米单位,并将转换后的值传递给CreateEnhMetaFile函数。
该示例显示“另存为”公共对话框,以使用户能够指定新的增强型图元文件的文件名。系统将三个字符的.EMF扩展名附加到此文件名,并将名称传递给CreateEnhMetaFile函数。
该示例还将图像的文本描述嵌入增强型元文件头文件中。该描述被指定为应用程序资源文件的字符串表中的资源。但是,在一个工作的应用程序中,这个字符串将从公共对话框中的自定义控件或仅为此目的显示的单独的对话框中检索。
/ *获取参考DC的句柄。*/
hdcRef = GetDC(hWnd);
/*
*确定相框尺寸。
* iWidthMM是以毫米为单位的显示宽度。
* iHeightMM是以毫米为单位的显示高度。
* iWidthPels是以像素为单位的显示宽度。
* iHeightPels是以像素为单位的显示高度
*/
iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE);
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE);
iWidthPels = GetDeviceCaps(hdcRef, HORZRES);
iHeightPels = GetDeviceCaps(hdcRef, VERTRES);
/*
*检索客户端的坐标
*矩形,以像素为单位。
*/
GetClientRect(hWnd, &rect);
/*
*将客户端坐标转换为.01-mm单位。
*使用iWidthMM,iWidthPels,iHeightMM和
* iHeightPels确定的数量
*。在x-
*和y方向。
*/
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;
/ *从字符串表中加载文件名过滤器。*/
LoadString(hInst,IDS_FILTERSTRING,
(LPSTR)szFilter, sizeof(szFilter));
/*
*替换嵌入的'%'分隔符
*在字符串表项中的字符串之间
*与'\\ 0'。
*/
for (i=0; szFilter[i]!='\0'; i++)
if (szFilter[i] == '%')
szFilter[i] = '\0';
/ *从表中加载对话框标题字符串。*/
LoadString(hInst,IDS_TITLESTRING,
(LPSTR)szTitle, sizeof(szTitle));
/ *初始化OPENFILENAME成员。*/
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;
/*
*显示文件名通用对话框。该
*由用户指定的文件名被传递
*到CreateEnhMetaFile函数并用于
*将图元文件存储在磁盘上。
*/
GetSaveFileName(&Ofn);
/ *从字符串表中加载描述。*/
LoadString(hInst,IDS_DESCRIPTIONSTRING,
(LPSTR)szDescription, sizeof(szDescription));
/*
*替换'%'字符串分隔符
*嵌入在字符串表中的字符串之间
*条目与'\\ 0'。
*/
for (i=0; szDescription[i]!='\0'; i++)
if (szDescription[i] == '%')
szDescription[i] = '\0';
/ *创建图元文件DC。*/
hdcMeta = CreateEnhMetaFile(hdcRef,
(LPTSTR)Ofn.lpstrFile,cy
&rect, (LPSTR)szDescription);
如果(!hdcMeta)
errhandler("CreateEnhMetaFile", hWnd);
/ *释放参考DC。*/
ReleaseDC(hWnd, hdcRef);