我終於完成了對圖象的打印操作,在此,將其全部奉上,以滿足與我有同樣經歷的朋友的需要.在這裡,我要特別感謝VCKbase中的LiuRong! 另外,由於這是我的第一篇文章 ,難免有不盡人意之處,歡迎大家提出批評和建議,先謝謝啦。
VC中的圖象打印一般有兩種方法:
一、選定打印設備環境後,用DrawState可以將圖象打印出來,這可以用於資源中圖象 的打印輸出,比較簡單,不再多說.
二、窗口內容的打印,這是本文的重點,也是我遇到的最大的問題,下面我主要介紹 這種打印;
1、工程簡單介紹
建立一個基於對話框的工程,對話框沒有標題欄,在其客戶區畫圖,根據用戶的需要 將客戶區的內容打印出來;
2、需要解決的問題
(1)、由於對話框沒有標題欄,菜單欄和其他按鈕,而要讓用戶在需要的時候打印其內 容,可以定義一個熱鍵,文中定義的熱鍵是(Ctrl+P),
(2)、由於是基於對話框的工程,應用程序框架沒有提供打印功能,這就需要我們自己 建立一個打印設備環境,可以用CDC的成員函數CreateDC來實現 ,但用此法時,必須事先 知道打印機名稱和打印機驅動程序名稱,考慮到這種限制,筆者用了另外一種方法,具體 方法請看工程Print函數中的代碼;
(3)、打印的原理:建立內存設備環境,將對話框的的內容拷貝到內存設備環境,然後 又將內存設備環境中的內容拷貝到打印設備環境;
(4)、筆者在實驗時發現,"在打印的時候在建立內存設備環境,然後將對話框的 的內容拷貝到內存設備環境,再將內存設備環境中的內容拷貝到打印設備環境"存在 一個問題 ,那就是打印時彈出的打印對話框要覆蓋我們建立的對話框,這樣實際拷貝的 內存設備環境中的內容是沒有被覆蓋的部分,針對這種情況,筆者用了了一個成員函數來 存儲內存設備環境 ,而且,在OnPaint中(也就是每次重畫時)將對話框中的內容重新拷貝 到內存設備環境中,這就是 LiuRong 給我的啟發,因為我原來打印出來的只是一個黑色 矩形框,謝謝你!
(5)、該工程還實現了無標題對話框的拖動!
三、使用方法
使用時,只需在OnPaint的"顯示圖片"部分畫圖就可以啦,一定要在拷 貝到內存設備環境中之前畫圖;
好啦,具體實現,請看工程文件中代碼(在vc6,XP下打印成功),感謝VCKbase以 及LiuRong!
下載源代碼:http://www.vckbase.com/code/downcode.asp?id=2313