- A+
节
适用于MDLogic打印机的驱动程序:
// MDLogic Printer Driver for Windows OS
// Version 1.0
#include
// Printer Driver Class
class PrinterDriver
{
public:
// Constructor & Destructor
PrinterDriver();
~PrinterDriver();
// Driver Initialization
bool Initialize(LPCTSTR lpszDriverName, LPCTSTR lpszPortName);
// Print Text
bool PrintText(LPCTSTR lpszText);
private:
// Private Variables
HANDLE hDevMode; // Device Mode Handle
HANDLE hDevNames; // Device Names Handle
HDC hDC; // Printer Device Context
// Private Methods
bool OpenPrinter(LPCTSTR lpszDriverName, LPCTSTR lpszPortName);
bool SetDeviceMode();
bool StartPage();
bool EndPage();
bool ClosePrinter();
};
// Constructor
PrinterDriver::PrinterDriver()
{
hDevMode = NULL;
hDevNames = NULL;
hDC = NULL;
}
// Destructor
PrinterDriver::~PrinterDriver()
{
// Cleanup
if (hDevMode != NULL)
GlobalFree(hDevMode);
if (hDevNames != NULL)
GlobalFree(hDevNames);
if (hDC != NULL)
DeleteDC(hDC);
}
// Initialize Printer Driver
bool PrinterDriver::Initialize(LPCTSTR lpszDriverName, LPCTSTR lpszPortName)
{
if (!OpenPrinter(lpszDriverName, lpszPortName))
return false; // Open Printer Failed
if (!SetDeviceMode())
return false; // Set Device Mode Failed
return true;
}
// Open Printer
bool PrinterDriver::OpenPrinter(LPCTSTR lpszDriverName, LPCTSTR lpszPortName)
{
// Allocate Memory (Global Alloc)
hDevMode = GlobalAlloc(GHND, sizeof(DEVMODE));
hDevNames = GlobalAlloc(GHND, 256);
// Open Printer
PRINTER_INFO_2* pPrinterInfo2 = NULL;
DWORD dwNeeded = 0;
if (!OpenPrinter(lpszDriverName, &hPrinter, pPrinterInfo2))
return false; // Open Printer Failed
if (!GetPrinter(hPrinter, 2, (LPBYTE)pPrinterInfo2, 0, &dwNeeded))
return false; // Get Printer Failed
// Set Printer Data
LPDEVNAMES lpDevNames = (LPDEVNAMES)GlobalLock(hDevNames);
lpDevNames->wDriverOffset = sizeof(DEVNAMES);
lstrcpy((LPTSTR)lpDevNames + lpDevNames->wDriverOffset, lpszDriverName);
lpDevNames->wOutputOffset = lpDevNames->wDriverOffset + lstrlen(lpszDriverName) + 1;
lstrcpy((LPTSTR)lpDevNames + lpDevNames->wOutputOffset, lpszPortName);
lpDevNames->wDefault = 0;
GlobalUnlock(hDevNames);
// Create Printer DC
hDC = CreateDC(lpszDriverName, lpszPortName, NULL, (DEVMODE*)GlobalLock(hDevMode));
GlobalUnlock(hDevMode);
// Cleanup
if (hPrinter != NULL)
ClosePrinter(hPrinter);
return true;
}
// Set Device Mode
bool PrinterDriver::SetDeviceMode()
{
// Get Printer Capabilities
if (!DeviceCapabilities(lpszDriverName, lpszPortName, DC_PAPERNAMES, NULL, (DEVMODE*)GlobalLock(hDevMode)))
return false; // Device Capabilities Failed
GlobalUnlock(hDevMode);
return true;
}
// Print Text
bool PrinterDriver::PrintText(LPCTSTR lpszText)
{
// Start Page
if (!StartPage())
return false; // Start Page Failed
// Select Font
HFONT hFont = CreateFont(14, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_MODERN, _T("Courier New"));
HGDIOBJ hOldFont = SelectObject(hDC, hFont);
// Write Text
if (!TextOut(hDC, 0, 0, lpszText, lstrlen(lpszText)))
return false; // Text Out Failed
// Cleanup
SelectObject(hDC, hOldFont);
DeleteObject(hFont);
// End Page
if (!EndPage())
return false; // End Page Failed
return true;
}
// Start Page
bool PrinterDriver::StartPage()
{
if (StartDoc(hDC, &di) <= 0)
return false; // Start Document Failed
if (StartPage(hDC) <= 0)
return false; // Start Page Failed
return true;
}
// End Page
bool PrinterDriver::EndPage()
{
if (EndPage(h
- 微信在线客服
- 这是我的微信扫一扫
-
- 我的微信公众号
- 扫一扫码上服务
-





