0

我正在尝试像这样创建一个增强的元文件:

// Obtain a handle to a reference device context.  

HDC hdcRef = GetDC(hwnd); 

// Determine the picture frame dimensions.  

int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE); 
int iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE); 
int iWidthPels = GetDeviceCaps(hdcRef, HORZRES); 
int iHeightPels = GetDeviceCaps(hdcRef, VERTRES); 

// Retrieve the coordinates of the client  
// rectangle, in pixels.  
RECT rect;
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 * iWidthMM * 100)/iWidthPels; 
rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels; 


// Create the metafile device context.  

CreateEnhMetaFile(hdcRef, (LPTSTR)"temp.emf", &rect, NULL); 

// Release the reference device context.  

ReleaseDC(hwnd, hdcRef); 

在这里拿了代码

最后我得到的只是一些带有奇怪编码名称的0字节非扩展文件,就像整灭攮晭一样。

可能是什么问题?

PS 另外,我在混合模式应用程序中调用它,从 c# 到 c++/cli 对象。

编辑奇怪编码的问题已解决,但创建的文件仍然是 0 字节长度。如何解决?

4

1 回答 1

1

演员表是问题,除非你真的必须,否则不要使用演员表。

令人惊讶的是,您从 Microsoft 网站获得了该演员表!您必须怀疑 MS 雇用的人员的质量。但在他们的代码中,这并没有错,只是多余的。当你把它翻译成你的代码时,它是错误的。

CreateEnhMetaFile(hdcRef, _T("temp.emf"), &rect, NULL);

_T宏是编写字符串文字的官方方法,根据您的编译器设置,该字符串文字将被解释为 Unicode 字符串或 ANSI 字符串。

于 2013-10-11T07:32:53.480 回答