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

Я пытаюсь создать расширенный метафайл, например так:

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

В чем может быть проблема?

Постскриптум Кроме того, я вызываю его в приложении в смешанном режиме, от c # до объекта c ++ / cli.

РЕДАКТИРОВАТЬ Проблема со странной кодировкой решена, но созданный файл по-прежнему имеет длину 0 байт. Как это можно решить?

0

Решение

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

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector