Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Расшарить метафайл.


Автор: FurryFreeman 18.3.2006, 23:53
Кзаалось бы, проще некуда:

hFile=CreateFile("1234.emf", GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
hMapping=CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, "gg");
hMapping=OpenFileMapping(FILE_MAP_READ, FALSE, "gg");
HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
PlayMetaFile(hdc,hMapping);
DeleteDC(hdc);

Но не работает. smile

Причём отдельно всё работает - если метафайл открыть так:

hMapping=GetMetaFile("1234.emf");
PlayMetaFile(hdc,hMapping);

..,то всё прекрасно рисуется.
Можно вместо метафайла отобразить в память текстовый файл, и через

Data=MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
S1=LPSTR(malloc(100));
memcpy(S1, Data, 100);
SetWindowText(hStatic, S1);
free(S1);

...посмотреть его содержимое, то есть отображение как таковое тоже работает.

Видимо ф-ции PlayMetaFile не нравится формат хэндлера hMapping, возвращаемого ф-ей OpenFileMapping..

Или я в другом месте дурак?

Автор: FurryFreeman 19.3.2006, 00:49
Да, точно, OpenFileMapping возвращает хендл меппинга файла, а PlayMetaFile надо именно хендл файла. smile Есть ли способ преодолеть такое?

Автор: Fixin 19.3.2006, 20:27
А зачем ты через маппинг передаешь файл? Передай то что просит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)