程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC中的圖象打印問題

VC中的圖象打印問題

編輯:關於VC++

我終於完成了對圖象的打印操作,在此,將其全部奉上,以滿足與我有同樣經歷的朋友的需要.在這裡,我要特別感謝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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved