Кзаалось бы, проще некуда: 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); Но не работает. Причём отдельно всё работает - если метафайл открыть так: 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.. Или я в другом месте *****?
Много лет назад, когда минута роуминга стоила несусветные деньги, а у меня их было мало, я в другом городе пытался "подключить сим-карту" из Волгограда, упирая на то, что сим-карта любого оператора в точности такая же, как и у всякого другого. И что проблем быть не может. На что мне резонно отвечали, что по размеру-то они одинаковы, никто не спорит, но вот микрокод, знаете ли... не получится изменить. HANDLE в Win32 - это целое семейство дескрипторов (индексов в таблицах размещений системных объектов). Вы получаете описатель (число) в неизвестно какой внутренней таблице размещения отображений и пытаетесь этот же описатель скормить функции отображения wmf. Разумеется, этот описатель может подойти чисто случайно с вероятностью, которой не бывает в работающих системах. Как SIM-карту нельзя "подключить в другом городе", так и дескриптор иного смысла не подойдёт в функции, в которой ожидается дескриптор совсем не такого смысла.