Record metafile avanzati
Un metafile avanzato è una matrice di record. Un record metafile è una struttura diENHMETARECORD a lunghezza variabile. All'inizio di ogni record di metafile avanzato è una strutturaEMR, che contiene due membri. Il primo membro, iType, identifica il tipo di record, ovvero la funzione GDI i cui parametri sono contenuti nel record. Poiché le strutture sono di lunghezza variabile, l'altro membro, nSize, contiene le dimensioni del record. Immediatamente dopo il membro nSize sono presenti i parametri rimanenti, se presenti, della funzione GDI. Il resto della struttura contiene dati aggiuntivi che dipendono dal tipo di record.
Il primo record in un metafile avanzato è sempre la struttura ENHMETAHEADER, ovvero l'intestazione del metafile avanzato. L'intestazione specifica le informazioni seguenti:
- Dimensioni del metafile, in byte
- Dimensioni della cornice immagine, in unità dispositivo
- Dimensioni della cornice dell'immagine, in unità di 01 millimetri
- Numero di record nel metafile
- Offset in una descrizione di testo facoltativa
- Dimensioni della tavolozza facoltativa
- Risoluzione del dispositivo originale, in pixel
- Risoluzione del dispositivo originale, in millimetri
Una descrizione di testo facoltativa può seguire il record di intestazione. La descrizione del testo descrive l'immagine e il nome dell'autore. La tavolozza facoltativa specifica i colori usati per creare il metafile avanzato. I record rimanenti identificano le funzioni GDI usate per creare l'immagine. L'output esadecimale seguente corrisponde a un record generato per una chiamata alla funzione SetMapMode.
00000011 0000000C 00000004
Il valore 0x00000011 specifica il tipo di record (corrisponde alla costante EMR_SETMAPMODE definita nel file Wingdi.h). Il valore 0x0000000C specifica la lunghezza del record, in byte. Il valore 0x00000004 identifica la modalità di mapping (corrisponde alla costante MM_LOENGLISH definita nella funzione SetMapMode).
Per un elenco di tipi di record aggiuntivi, vedere Metafile Structures.