C ++ Создание расширенного метафайла приводит к пустому файлу

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-байтовый файл без расширения с странно закодированным именем, smth, как 整 灭 攮 晭.

В чем проблема?

PS Кроме того, я вызываю его в смешанном режиме, из С# через объект c++/cli.

EDIT Проблема со странным кодированием решена, но созданный файл все еще имеет длину 0 байт. Как это можно решить?

Теги:
mixed-mode
metafile
.emf

1 ответ

1
Лучший ответ

Бросок является проблемой, не используйте броски, если вам действительно не нужно.

Удивительно, что вы получили эту акцию с веб-сайта Microsoft! Вы должны задуматься о качестве проката людей MS. Но в их коде это не ошибка просто лишняя. Когда вы переводите его на свой код, это неправильно.

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

Макрос _T является официальным способом записи строкового литерала, который будет интерпретироваться как строка Unicode или строка ANSI в зависимости от ваших параметров компилятора.

  • 0
    @ tube-builder Хорошо, я удивлен, мне показалось, что это довольно хорошее объяснение этой ошибки.
  • 0
    черт возьми, я действительно извиняюсь, не был внимательным, теперь файл создан (хотя все еще пустой). Большое спасибо!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню