?? 11.4.2 元文件的保存與打開.txt
字號:
11 .4.2 元文件的保存與打開
接下來,我們希望把保存圖形繪制命令的元文件保存為磁盤文件,以便在以后需要時
隨時可以打開該文件,并在程序窗口中顯示其中的圖形內(nèi)容。于是為 Graphic程序的
CGraphicView類分別添加【文件】子菜單下的【打開】和【保存】菜單命令的響應(yīng)函數(shù),
然后在這兩個命令響應(yīng)函數(shù)(分別為 OnFileOpen和 OnFileSave )中分別實現(xiàn)元文件的打
開和保存。
為了保存元文件,可以使用 CopyMetaFile函數(shù),該函數(shù)的作用是把 Windows元文件
的內(nèi)容復(fù)制到指定的文件。該函數(shù)的聲明形式如下所示 :
m
HMETAFILE CopyMetaFile( HMETAFILE hmfSrc ,LPCTSTR lpszFile
CopyMetaFile函數(shù)有兩個參數(shù),含義分別如下所述 :
. hmfSrc
指定要復(fù)制的 Windows元文件的句柄:
. lpszFile
指定復(fù)制目標文件名稱。我們在Graphic程序的 OnFileSave函數(shù)中添加如例 11-13所示的代碼,以
實現(xiàn)元文件的保存。
例 11-13
void CGraphicView : :OnFileSave()
HMETAFILE hmetaFile;
hmetaFile=m_dcMetaFile.Close();
CopyMetaFile(hmetaFile, "meta.wmf" ) ;
m_dcMetaFile.Create() ;
DeleteMetaFile(hmetaFile) ;
在上述例 11-13所示代碼中,首先定義一個 HMETAFILE類型的元文件句柄變量,接著調(diào)用元文件設(shè)
備上下文的 Close成員函數(shù)得到對應(yīng)的元文件句柄,然后調(diào)用 CopyMetaFile函數(shù)將該元文件句柄所
指向的元文件中的內(nèi)容復(fù)制到指定的磁盤文件: . meta.wmf中。對元文件來說,當把它的內(nèi)容保存
為一個磁盤文件時,通常將其擴展名取為 "wmf",即 "Windows Meta File"的縮寫。復(fù)制操作完成
之后,需要重新再創(chuàng)建一個元文件 DC,以備下一次繪制圖形使用。這時,對于己得到的元文件句柄:
hmetaFile來說,它所標識的元文件就不再需要了,所以將其刪除。
再次運行 Graphic程序,利用【繪圖\直線】菜單項在程序窗口中繪制一條直線,然后利用【文件飛
保存】菜單命令保存元文件內(nèi)容,這時可以發(fā)現(xiàn) Graphic程序目錄下多了一個文件: meta.wmf。
接下來在 Graphic程序中實現(xiàn)將剛才己保存的元文件打開這一功能。這時需要利用 GetMetaFile函
數(shù)得到指定元文件的句柄。在 Win32 API中己經(jīng)廢棄這個函數(shù)了, Win32 應(yīng)用程序應(yīng)該使用
GetEnhMetaFile函數(shù)創(chuàng)建一個增強型元文件句柄(關(guān)于增強型元文件的知識,讀者可以自行查看
MSDN中的相關(guān)資料〉。但是在程序中仍可以使用 GetMetaFile這個函數(shù)來得到元文件句柄,這主要
是為了兼容 Windows的 16位版本。所以在 Graphic程序的 OnFileOpen函數(shù)中添加如例 11哺 14所
示代碼,以實現(xiàn)元文件的打開。
侈IJ 11-14
void CGraphicView : :OnFileOpen()
HMETAFILE hmetaFile:
hmetaFile=GetMetaFile("meta.wmf");
m_dcMetaFile.PlayMetaFile(hmetaFile) ;
DeleteMetaFile(hmetaFile);
invalidate () ;
在上述例 11-14所示代碼中,首先利用 GetMetaFile函數(shù)獲得指定元文件: meta.wmf 的句柄。接著
就在元文件設(shè)備上下文中播放該元文件,這樣,該元文件包含的圖形繪制命令就被記錄下來了。播
放之后,對于元文件句柄: hmetaFile來說,己經(jīng)沒有用處了,所以將其刪除。上述代碼的最后調(diào)用
Invalidate函數(shù)以引起窗口的重繪,這樣程序就會調(diào)用 OnDraw函數(shù)。前面我們己經(jīng)在 OnDraw函數(shù)
中調(diào)用當前窗口設(shè)備上下文 (pDC)的 PlayMetaFile函數(shù)在當前窗口中播放元文件,因此這時程序就
可以在當前窗口中顯示該元文件包含的圖形繪制命令的結(jié)果。
再次運行 Graphic程序,利用【文件飛打開】菜單命令即可打開先前保存的元文件,這時,在程序
窗口中可以看到先前繪制的圖形(本例是一條直線)。這里再次強調(diào),元文件保存的并不是圖形數(shù)據(jù),
而是圖形繪制命令。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -