VC下打印機的使用
發表時間:2023-08-13 來源:明輝站整理相關軟件相關文章人氣:
[摘要]VC 5.0是開發Windows 95下應用程序的強大工具。本文將通過一個具體實例討論用VC打印文字和圖形的一些技術。在Windows 95下,顯示器和打印機、繪圖儀都被視為輸出設備。系統默認的輸出...
VC 5.0是開發Windows 95下應用程序的強大工具。本文將通過一
個具體實例討論用VC打印文字和圖形的一些技術。在Windows 95下,
顯示器和打印機、繪圖儀都被視為輸出設備。系統默認的輸出設備是
顯示器。要使用打印機,首先需要創建一個指向打印機的設備環境句柄,
然后通過該句柄調用相關的繪圖函數把所需的文字和圖形輸出至打印
機上。當打印結束后,刪除這個設備環境句柄即可。
一、技術細節
當我們在Windows95下安裝好打印機后,總是需要設置一個為默認
打印機,在Windows95的啟動配置文件WIN.INI中[window]段中列出了
帶有關鍵字device的默認打印機。如果在文件WIN.INI中有如下幾行:
[windows]
[其他程序行]
device=EPSON LQ-1600K,EPSON24,LPT1:
在device后的字符串中就包含了系統中默認的打印機的三個重要
屬性.它們依次是打印機的設備名是LQ-1600K,驅動程序名是EPSON24,
輸出端口為LPT1。在程序中我們可調用API函數GetProfileString從
WIN.INI文件中獲得這個設備字符串。再將這個設備字符串進行分解,
獲得這三個屬性,作為參數用API函數CreateDC調用。如果調用成功,
則為默認打印機創建一個設備環境句柄,否則返回一個空值(NULL)。
CreateDC函數的原形如下:
HDC CreateDC(
LPCTSTR lpszDriver,
LPCTSTR lpszDevice,
LPCTSTR lpszOutput,
CONST DEVMODE *lpinitData
);
二、程序代碼及說明
新建一個名為Test的工程,窗體類型為對話框(Dialog based)
模式。在窗體中加入一個按鈕(Button),設置這個Button的屬性:
ID=IDC_PRINT,CAPTION="打印"。在類向導中找到該Button
的單擊事件對應的消息BN_CLICKED,增加其成員函數OnPrint。
在TestDlg.cpp文件中找到OnPrint函數并作如下改動。
void CTestDlg::OnPrint()
{
// 增加如下代碼
char szprinter[80];
char *szDevice,*szDriver,*szOutput;
HDC hdcprint; // 定義一個設備環境句柄
//定義一個打印作業
Static DOCINFO di={sizeof(DOCINFO),"printer",NULL};
// 得到設備字符串存入數組szprinter中
GetProfileString("windows","device",",,,",szprinter,80);
// 將設備字符串分解
if(NULL!=(szDevice=strtok(szprinter,","))&&
NULL!=(szDriver=strtok(NULL,","))&&
NULL!=(szOutput=strtok(NULL,",")))
// 創建一個打印機設備句柄
if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0)
{
if(StartDoc(hdcprint,&di)>0) //開始執行一個打印作業
{
StartPage(hdcprint); //打印機走紙,開始打印
SaveDC(hdcprint); //保存打印機設備句柄
// 輸出一行文字
TextOut(hdcprint,1,1,"這是一個例子",12);
// 輸出一條直線
MoveToEx(hdcprint,20,20,NULL);
LineTo(hdcprint,120,120);
RestoreDC(hdcprint,-1); //恢復打印機設備句柄
EndPage(hdcprint); //打印機停紙,停止打印
EndDoc(hdcprint); //結束一個打印作業
MessageBox("打印完畢!","提示",MB_ICONINFORMATION);
}
// 用API函數DeleteDC銷毀一個打印機設備句柄
DeleteDC(hdcprint);
}
else
{
MessageBox("沒有默認打印機,或者沒有安裝打印機!");
return;
}
}