mdlogic打印机驱动

  • mdlogic打印机驱动已关闭评论
  • A+
所属分类:远程维修
摘要

节适用于MDLogic打印机的驱动程序://MDLogicPrinterDriverforWindowsOS//Version1.0#include//WindowsAPIDefinitions//PrinterDriverClassclassPrinterDriver{public://Constr

适用于MDLogic打印机的驱动程序:

// MDLogic Printer Driver for Windows OS
// Version 1.0

#include // Windows API Definitions

// 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

  • 微信在线客服
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 扫一扫码上服务
  • weinxin