MAX_PRINTER_DRV_NUM];
//安装的所有打印机
HZDotArrayFont *m_pHzDAF;
//汉字字符的打印点阵信息提取器,可以提取多种打印字体的点阵信息,如24点阵楷体,48点阵宋体等
public:
//加载一个打印机驱动
程序 void LoadPrinterDriver(GeneralPrinter *p);
//加载一个获取汉字打印点阵信息的驱动器
void LoadHzDAFDriver(HZDotArrayFont *p); //选择一个工作打印机
void SelectWorkPrinter(char *szPrinterName); //打印机控制
void SetColor(int id) {m_pPrinter->SetColor(id);};
//其他打印机控制函数
/*打印一个字符串,可以包括汉字字符,只要调用该函数就可以将信息打印出来*/
int PrintString(char *str,int len,char * ColorName=“黑色”);
};
最后是打印机驱动程序的设计,这里是设备无关性设计的关键所在。为满足系统设备无关性的要求,设计了一个包含各种基本打印动作的打印机基类,所有的打印机都从该基类派生出来。在打印机的基类中定义了打印机的各种控制代码、打印机的种种操作方法,在具体的打印机类中将它们实例化。代码如下:
class GeneralPrinter
{public :
/*PRINTCOLOR是事先定义好的打印机颜色结构,用来定义打印机每一种颜色的控制代码*/
PRINTCOLOR *m_pColor;
/*本打印机支持颜色的数量*/
int m_iPrtColorNum;
/*打印机是否支持汉字的直接打印,即该打印机本身是否带有汉字的打印字库,如果打印机不支持汉字的直接打印,汉字的打印点阵信息将由字库点阵信息提取器类负责获取。*/
BOOL m_bDirectPrintHz;
/*HPRINTHANDLE 是本系统事先定义好的打印机句柄结构,用来标识打印机的硬件端口,是数据输出到打印机的通道。*/
PRINTHANDLE m_hPrinter;
char m_szPrinterName[PRINTR_PORTNAME_MAX_LEN];
/*打印机名字,用来区别打印机的惟一标志*/
PRINTERCONTROLCODE ;
/*PRINTERCONTROLCODE 是本系统事先定义好的打印机控制代码结构,用来控制打印机行为,如打印机初始化控制代码,打印机设置页长控制代码等打印机支持的方法。*/
public:
/*szPort是打印机所接端口的端口名字,如‘com1’,‘/dev/bbp0’等*/
GeneralPrinter(char *szPort);
~GeneralPrinter();
virtual void ResetPrinter();
/*打印机初始化的方法*/
virtual void SetAutoCRLF(int iAuto); /*设置打印机是否自动换行的方法,iAuto为1表示自动换行,为0则不自动换行*/
/*如果是彩色打印机的话,下面两个函数用来设置字符的打印颜色,szColorName是颜色的名字,如“黑色”,“红色”等,但必须是打印机支持的颜色。iColorId 颜色的Id值一般为0~7之间的值。*/
virtual void SetColor(char *szColorName);
virtual void SetColor(int iColorId);
/*将打印机设置为图形模式下的操作,iMode 表示不同的图形模式,如180×180等*/
virtual void SetGraphMode(int iMode);
/*用来打印字符串(包括汉字字符)的方法,iStrLen 表示字符串长度*/
virtual int PrintString(char * szStr,int iStrLen);
/*用来打印图形的点阵信息,pData存放图形的点阵信息,比如汉字的打印点阵等*/
virtual int PrintGraphDotArray(char * pData,int iDataLen);
/*其他方法的声明*/
};
驱动程序的编写实例
要实现本系统的打印驱动,必须遵守本系统的规范,就是新的打印机驱动必须从基类GeneralPrinter派生出来,然后再将各种数据实例化,这样才能保证设备的无关性。下面以佳能的BJC5500彩色喷墨打印机为例说明驱动程序的编写方法。
class Printer_BJC5500 : public GeneralPrinter {
public:
PRINTCOLOR m_AllColor[BJC5500_PRT_
COLOR_NUM];
public:
Printer_BJC5500 (char *szPort);
~Printer_BJC5500 ();
virtual int PrintGraphDotArray(char * pData,int iDataL