元檔案的儲存,儲存圖形,重繪圖形
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,先定義,再呼叫
執行,視窗尺寸變化時卻》》。。