明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

VC下打印機(jī)的使用

[摘要]VC 5.0是開(kāi)發(fā)Windows 95下應(yīng)用程序的強(qiáng)大工具。本文將通過(guò)一個(gè)具體實(shí)例討論用VC打印文字和圖形的一些技術(shù)。在Windows 95下,顯示器和打印機(jī)、繪圖儀都被視為輸出設(shè)備。系統(tǒng)默認(rèn)的輸出...
VC 5.0是開(kāi)發(fā)Windows 95下應(yīng)用程序的強(qiáng)大工具。本文將通過(guò)一

個(gè)具體實(shí)例討論用VC打印文字和圖形的一些技術(shù)。在Windows 95下,

顯示器和打印機(jī)、繪圖儀都被視為輸出設(shè)備。系統(tǒng)默認(rèn)的輸出設(shè)備是

顯示器。要使用打印機(jī),首先需要?jiǎng)?chuàng)建一個(gè)指向打印機(jī)的設(shè)備環(huán)境句柄,

然后通過(guò)該句柄調(diào)用相關(guān)的繪圖函數(shù)把所需的文字和圖形輸出至打印

機(jī)上。當(dāng)打印結(jié)束后,刪除這個(gè)設(shè)備環(huán)境句柄即可。

一、技術(shù)細(xì)節(jié)

當(dāng)我們?cè)赪indows95下安裝好打印機(jī)后,總是需要設(shè)置一個(gè)為默認(rèn)

打印機(jī),在Windows95的啟動(dòng)配置文件WIN.INI中[window]段中列出了

帶有關(guān)鍵字device的默認(rèn)打印機(jī)。如果在文件WIN.INI中有如下幾行:

 

[windows]

[其他程序行]

device=EPSON LQ-1600K,EPSON24,LPT1:

在device后的字符串中就包含了系統(tǒng)中默認(rèn)的打印機(jī)的三個(gè)重要

屬性.它們依次是打印機(jī)的設(shè)備名是LQ-1600K,驅(qū)動(dòng)程序名是EPSON24,

輸出端口為L(zhǎng)PT1。在程序中我們可調(diào)用API函數(shù)GetProfileString從

WIN.INI文件中獲得這個(gè)設(shè)備字符串。再將這個(gè)設(shè)備字符串進(jìn)行分解,

獲得這三個(gè)屬性,作為參數(shù)用API函數(shù)CreateDC調(diào)用。如果調(diào)用成功,

則為默認(rèn)打印機(jī)創(chuàng)建一個(gè)設(shè)備環(huán)境句柄,否則返回一個(gè)空值(NULL)。

CreateDC函數(shù)的原形如下:

HDC CreateDC(

LPCTSTR lpszDriver,

LPCTSTR lpszDevice,

LPCTSTR lpszOutput,

CONST DEVMODE *lpinitData

);

二、程序代碼及說(shuō)明

新建一個(gè)名為Test的工程,窗體類型為對(duì)話框(Dialog based)

模式。在窗體中加入一個(gè)按鈕(Button),設(shè)置這個(gè)Button的屬性:

ID=IDC_PRINT,CAPTION="打印"。在類向?qū)е姓业皆揃utton

的單擊事件對(duì)應(yīng)的消息BN_CLICKED,增加其成員函數(shù)OnPrint。

在TestDlg.cpp文件中找到OnPrint函數(shù)并作如下改動(dòng)。

void CTestDlg::OnPrint()

{

// 增加如下代碼

char szprinter[80];

char *szDevice,*szDriver,*szOutput;

HDC hdcprint; // 定義一個(gè)設(shè)備環(huán)境句柄

 

//定義一個(gè)打印作業(yè)

Static DOCINFO di={sizeof(DOCINFO),"printer",NULL};

 

// 得到設(shè)備字符串存入數(shù)組szprinter中

GetProfileString("windows","device",",,,",szprinter,80);

// 將設(shè)備字符串分解

if(NULL!=(szDevice=strtok(szprinter,","))&&

NULL!=(szDriver=strtok(NULL,","))&&

NULL!=(szOutput=strtok(NULL,",")))

// 創(chuàng)建一個(gè)打印機(jī)設(shè)備句柄

if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0)

{

if(StartDoc(hdcprint,&di)>0) //開(kāi)始執(zhí)行一個(gè)打印作業(yè)

{

StartPage(hdcprint); //打印機(jī)走紙,開(kāi)始打印

SaveDC(hdcprint); //保存打印機(jī)設(shè)備句柄

// 輸出一行文字

TextOut(hdcprint,1,1,"這是一個(gè)例子",12);

// 輸出一條直線

MoveToEx(hdcprint,20,20,NULL);

LineTo(hdcprint,120,120);

RestoreDC(hdcprint,-1); //恢復(fù)打印機(jī)設(shè)備句柄

EndPage(hdcprint); //打印機(jī)停紙,停止打印

EndDoc(hdcprint); //結(jié)束一個(gè)打印作業(yè)

MessageBox("打印完畢!","提示",MB_ICONINFORMATION);

}

// 用API函數(shù)DeleteDC銷毀一個(gè)打印機(jī)設(shè)備句柄

DeleteDC(hdcprint);

}

else

{

MessageBox("沒(méi)有默認(rèn)打印機(jī),或者沒(méi)有安裝打印機(jī)!");

return;

}

}