1. 程式人生 > >元檔案的儲存,儲存圖形,重繪圖形

元檔案的儲存,儲存圖形,重繪圖形

1, CMateFileDC

可以用來多次開啟自己的畫布,這個元檔案包含許多介面的命令

當繪製好之後可以用來播放元檔案

首先,建立一個CMateFileDC的元檔案物件

然後呼叫Create原函式,建立一個windows檔案裝置上下文,將CMateFileDC物件關聯起來

下一步,給CMateFileDC物件傳送一系列CDC GDI的命令,僅僅moveto,lineto的那些GDI的命令能使用

在想要傳送命令之後,呼叫close命令函式來關閉元檔案的裝置上下文,返回原檔案的控制代碼,

  然後,處理CMateFileDC物件

在playmatefile中播放原始檔

增加一個成員變數

呼叫create方法,可以為原檔案指定一個檔名,如果檔名為空,建立一個新的檔案(是一個記憶體元原始檔)

將透明畫刷選擇到元檔案當中,將onlbuttonup中的case語句中的dc換成元檔案中的dc

 

 傳送gdi返回一個原檔案控制代碼,返回hmetafile型別

註釋+定義hmetafile

播放原檔案

 

準備元檔案的裝置上下文,需要將他在原檔案dc中繪製,所以再次呼叫create建立元檔案,然後將他與元檔案dc關聯起來,控制代碼播放結束便不再需要了,用delete刪除原始檔(但先前繪製的圖形不在了)

如何還能把先前的元檔案播放,可以在新的gdi函式中繪製圖形

視窗尺寸改變的時候才能看到

 

 為檔案選單中的開啟,儲存增加命令響應(添加了兩個)

編輯程式碼,儲存元檔案用CopyMetaFile,拷貝windows元檔案到指定檔案

定義一個控制代碼,再呼叫CopyMetaFile(有兩個引數,一個是windows元檔案,一個是檔名)

拷貝之後,重新建立一個元檔案,以便下一次繪圖

對控制代碼來說元檔案不需要了,刪掉

開啟

用到GetMetaFile函式,得到增強型元檔案

1,先從儲存的原檔案當中得到控制代碼

2,有了控制代碼之後用PlayMetaFile播放,元檔案輸出的命令就被記錄下來了,控制代碼就沒有用了

3,刪除

4,呼叫Invalidate()引起視窗的重畫

 

 視窗重畫會呼叫ondraw函式,就會播放原檔案了

(這樣的儲存並不是儲存圖形的資料,而是圖形的命令)

 

也可以利用相容dc儲存圖形,然後利用ondraw函式將相容dc儲存的圖形拷貝到目的函式中

 增加成員變數

判斷這個dc是否建立,若沒建立,就建立一個和當前dc相容

當前的大小與客戶區的是一致的,利用相容點陣圖完成,要先建立相容點陣圖

 

 將這個點陣圖選進

 

 將透明畫刷選到相容dczhong

 

 改寫。case語句都利用相容dc

ondraw中的註釋

利用相容dc

拷貝到目的dc,先定義,再呼叫

 

 執行,視窗尺寸變化時卻》》。。