VC下打印機(jī)的使用
發(fā)表時(shí)間:2023-08-13 來(lái)源:明輝站整理相關(guān)軟件相關(guā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)的輸出...
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;
}
}