Visual C++ 6.0編程實現列印功能

來源:互聯網
上載者:User

Visual C++6.0是開發Windows應用程式的強大工具,但是要通過它實現程式的列印功能, 一直是初學者的一個痛點,經常有朋友詢問如何在VC中實現列印功能,他們往往感到在MFC提 供的架構內實現這個問題很複雜,不知道如何下手。本例針對這個問題,介紹一種簡單的方 法實現文字串的列印功能,讀者朋友可以在此基礎上稍微改動一下,就可以實現檔案、映像的 列印功能。

一、實現方法

在Windows作業系統下,顯示器、印表機和繪圖器都 被視為輸出裝置,正常情況下,系統預設的輸出裝置是顯示器。要使用印表機,首先需要建立 一個指向印表機的裝置環境控制代碼,然後通過該控制代碼調用相關的繪圖函數把所需的文字和圖形輸 出至印表機上。當列印結束後,刪除這個裝置環境控制代碼即可。

當Windows系統中安裝好 印表機後,系統總是自動化佈建一個印表機為系統的預設印表機,在Windows的啟動設定檔 Win.ini中的[window]段中列出了帶有關鍵字device的預設印表機。下面是某一機器中 Win.ini中的[Windows]欄位的內容:

[windows]
load=
run=
NullPort=None
device=HP LaserJet 4050 (computer000),HPBFDB1,LPT1

 

在上述關鍵字device後的字串中,包含了系 統中預設印表機的三個重要屬性,它們依次是印表機的裝置名稱HP LaserJet 4050 (computer000),驅動程式名是HPBFDB1,輸出連接埠為LPT1。

為了操縱系統預設的列印 機,實現程式的列印功能,在程式中可調用API函數GetProfileString()從Win.ini檔案中 獲得device這個裝置字串,該函數的原型為:DWORD GetProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize)。函數中lpAppName參數為所要檢索的Win.ini檔案中的欄位名;lpKeyName為欄位中的 關鍵字名;lpDefault為預設的字串;lpReturnedString為檢索到的字串,如果該函數沒 有從lpKeyName關鍵字中檢索到相應的字串,則kpRetrunedString返回預設字串 lpDefault;nSize為返回字串的長度。

擷取上述字串後,再使用strtok()函數 將該字串進行分解,獲得與印表機相關的三個屬性,作為API函數CreateDC()建立印表機設 備環境控制代碼的參數,CreateDC()函數如果調用成功,則為預設印表機建立一個裝置環境控制代碼 ,否則返回一個空值(NULL)。該函數的原形為:HDC CreateDC(LPCTSTR lpszDriver,LPCTSTR lpszDevice,LPCTSTR lpszOutput,CONST DEVMODE *lpinitData)。該函數的前三個參數恰好 對應印表機的三個屬性,最後一個參數為初始化印表機驅動程式的資料,一般情況下該參數 設定為NULL就可以了。

在具體列印的過程中,調用int StartDoc( HDC hdc, CONST DOCINFO *lpdi )函數來開始一個列印任務,其中參數lpdi為一個指向DOCINFO結構的指標, 該結構如下:

typedef struct {
 int cbSize; //結構的尺寸大小;
 LPCTSTR lpszDocName; //文檔的名字;
 LPCTSTR lpszOutput; //輸出文檔名, 一般情況下為NULL;
 LPCTSTR lpszDatatype;//用來記錄列印過程的資料類型,一般 情況下為NULL;
 DWORD fwType; //用來支援列印工作的額外資訊,一般情況下為 NULL;
} DOCINFO, *LPDOCINFO;

開始一個列印任務後,再調用StartPage (hdcprint)函數讓印表機走紙,通知印表機有文檔將要列印;接下來的工作就是輸出資料了 ,這部分工作對於開發人員來說就象往電腦螢幕上輸出文字、映像一樣容易,只不過是計 算機根據當前的裝置環境控制代碼自動將資料輸出到印表機罷了。資料列印完後,需要作一些善 後處理工作,使用RestoreDC(hdcprint,-1)函數恢複印表機裝置控制代碼、EndPage(hdcprint)函 數讓印表機停止列印,最後調用EndDoc(hdcprint)函數結束上述的列印工作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.