读书人

在C++Builder中小弟我怎么设立默认打

发布时间: 2012-02-04 15:43:09 作者: rapoo

在C++Builder中,我如何设立默认打印机?(请求打印机问题,急! )
我搜索了一下,没有C++Builder中,没有如何设立默认打印机的代码?

在自助设备上,我有三个打印机,打印机分别是 HP1020 ,EPSON 1600K, LJ2050N 打印机。

现在要实现不同的东西,即(水费,电费,帐单)自动打印在三台不同打印机上?请问如何实现?

[解决办法]
这个可能对楼主有用:

VC下打印机的使用
显示器和打印机、绘图仪都被视为输出设备。系统默认的输出设备是显示器。要使用打印机,首先需要创建一个指向打印机的设备环境句柄,然后通过该句柄调用相关的绘图函数把所需的文字和图形输出至打印机上。当打印结束后,删除这个设备环境句柄即可。
一、技术细节
  当我们在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
);
二、程序代码及说明
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;

  }

  }

[解决办法]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char ADevice[300];
char ADriver[300];
char APort[300];
char s[300];
unsigned int hDeviceMode;
TPrinter* APrinter = Printer();
// int nIndex = APrinter-> Printers-> IndexOf( "Adobe PDF ");
int nIndex = APrinter-> Printers-> IndexOf( "Microsoft Office Document Image Writer ");
APrinter-> PrinterIndex = nIndex;

APrinter-> GetPrinterA(ADevice, ADriver, APort, hDeviceMode);
StrCopy(s, ADevice);
StrCat(s, ", ");
StrCat(s, ADriver);
StrCat(s, ", ");
StrCat(s, APort);
WriteProfileString( "windows ", "device ", s);
StrCopy (s, "windows ");
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, (long)&s);
}

读书人网 >C++ Builder

热点推荐