文章編號: 66949 - 上次校閱: 2003年10月30日 - 版次: 3.0

資訊: Windows 中繼檔函式 & Aldus 可置入中繼檔

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

許多 Windows 架構應用程式匯入或匯出 Windows 中繼檔格式,稱為 Aldus 可置入中繼檔 (APM) 格式。在此格式這些中繼檔無法搭配 Windows 中繼檔函數,如 GetMetaFile()]、 [CopyMetaFile()]、 [PlayMetaFile(),] 和 [等等。若要將這些中繼檔 APM 標頭必須從移除中繼檔,且剩餘的中繼檔位元必須寫到新建立的中繼檔。

其他相關資訊

APM 標頭為 22 位元組的長度和定義如下:
   typedef struct
     {
     DWORD   key;
     HANDLE  hmf;
     RECT    bbox;
     WORD    inch;
     DWORD   reserved;
     WORD    checksum;
     } APMFILEHEADER;
				
下列的程式碼片段示範如何將使用所提供的 Windows 中繼檔函式的 Aldus 可置入中繼檔從建立以記憶體為基礎的 Windows 中繼檔。

可置放的 Windows 中繼檔也會記錄在頁面 26 27 的"程式設計人員參考音量 4: 資源 」 手動從 Windows 3.1 SDK 文件。

範例程式碼

   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);
   }
				

這篇文章中的資訊適用於:
  • Microsoft Windows Software Development Kit 3.0
  • Microsoft Windows Software Development Kit 3.1
關鍵字:?
kbmt kb16bitonly KB66949 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:66949? (http://support.microsoft.com/kb/66949/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。