Artigo: 66949 - Última revisão: quinta-feira, 30 de Outubro de 2003 - Revisão: 3.0

INFO: Windows Metafile funções & Aldus metaficheiros posicionável

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Muitas aplicações baseadas no Windows importar ou exportar metaficheiros do Windows num formato conhecido como o formato Aldus posicionável Metaficheiro (APM). Neste formato, estes metaficheiros não podem ser utilizados com as funções de Metaficheiro do Windows, tais como GetMetaFile(), CopyMetaFile(), PlayMetaFile() e assim sucessivamente. Para utilizar estes metaficheiros, tem de remover o cabeçalho da APM do metaficheiro e os restantes bits metaficheiro tem ser escritos um metaficheiro recém-criado.

Mais Informação

O cabeçalho APM é 22 bytes de comprimento e é definido da seguinte forma:
   typedef struct
     {
     DWORD   key;
     HANDLE  hmf;
     RECT    bbox;
     WORD    inch;
     DWORD   reserved;
     WORD    checksum;
     } APMFILEHEADER;
				
o fragmento de código seguinte demonstra como criar um metaficheiro do Windows baseadas na memória a partir de um metaficheiro posicionável Aldus que funcione com as funções de metaficheiro fornecidas pelo Windows.

Posicionável metaficheiros do Windows estão também documentados nas páginas 26 27 do "Programmer Reference, volume 4: recursos" manual de documentação do SDK do Windows 3.1.

Código de exemplo

   BOOL RenderAPM (fh)
   int   fh; // a file handle to the APM metafile is passed in
   {
       HANDLE           hData;
       LPSTR            lpData;
       DWORD            OffsetToMeta;
       METAHEADER       mfHeader;
       APMFILEHEADER    APMHeader;

       OffsetToMeta = sizeof(APMHeader);

   // Seek to beginning of file and read APM header
       _llseek(fh, 0, 0);
       if (!_lread(fh, (LPSTR)&APMHeader, sizeof(APMFILEHEADER)))
           // Error in reading the file
           return(FALSE);

   // Return to read metafile header
       _llseek(fh, OffsetToMeta, 0);
       if (!_lread(fh, (LPSTR)&mfHeader, sizeof(METAHEADER)))
           // Error in reading
           return(FALSE);

   // Allocate memory for memory based metafile
       if (!(hData = GlobalAlloc(GHND, (mfHeader.mtSize * 2L))))
           return(FALSE);
   // Were we successful?
       if (!(lpData = GlobalLock(hData)))
       {
           // Error in allocation
           GlobalFree(hData);
           return(FALSE);
       }

   // Read metafile bits
       _llseek(fh, OffsetToMeta, 0);
       if (!_lread(fh, lpData, (mfHeader.mtSize * 2L)))
       {
           // Error in reading
           GlobalUnlock(hData);
           GlobalFree(hData);
           return(FALSE);
       }

   // Create the METAFILE with the bits we read in.
       if (!(hMF = SetMetaFileBits(hData)))
           return(FALSE);

       GlobalUnlock(hData);

   // Close the APM file
       _lclose(fh);

   // Return success
       return(TRUE);
   }
				

A informação contida neste artigo aplica-se a:
  • Microsoft Windows Software Development Kit 3.0
  • Microsoft Windows Software Development Kit 3.1
Palavras-chave: 
kbmt kb16bitonly KB66949 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 66949  (http://support.microsoft.com/kb/66949/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.