我遇到了一个对我来说非常陌生的问题:打印到打印机上。通过搜索互联网,我找到了一种方法可以将文本打印到我的打印机上,但只能是简单的文本。请参见以下内容:
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main ()
{
TCHAR szDriver[16] = _T("WINSPOOL");
TCHAR szPrinter[256];
DWORD cchBuffer = 255;
HDC hdcPrint = NULL;
HANDLE hPrinter = NULL;
PRINTER_INFO_2 *pPrinterData;
BYTE pdBuffer[16384];
BOOL bReturn = FALSE;
DWORD cbBuf = sizeof (pdBuffer);
DWORD cbNeeded = 0;
pPrinterData = (PRINTER_INFO_2 *)&pdBuffer[0];
// get the default printer name
bReturn = GetDefaultPrinter(
szPrinter,
&cchBuffer);
if (bReturn) {
// open the default printer
bReturn = OpenPrinter(
szPrinter,
&hPrinter,
NULL);
}
if (bReturn) {
// get the printer port name
bReturn = GetPrinter(
hPrinter,
2,
&pdBuffer[0],
cbBuf,
&cbNeeded);
// this handle is no longer needed
ClosePrinter(hPrinter);
}
if (bReturn) {
// create the Print DC
hdcPrint = CreateDC(szDriver, szPrinter,
pPrinterData->pPortName, NULL);
}
if (hdcPrint) {
// Print a test page that contains the string
// "PRINTER TEST" in the upper left corner.
Escape(hdcPrint, STARTDOC, 8, "Test-Doc", NULL);
TextOut(hdcPrint, 50, 50, _T("PRINTER TEST"), 12);
Escape(hdcPrint, NEWFRAME, 0, NULL, NULL);
Escape(hdcPrint, ENDDOC, 0, NULL, NULL);
// Delete the printer DC.
DeleteDC(hdcPrint);
}
这可以成功地将“PRINTER TEXT”打印到我的打印机上。我想要的是如何指定一个BMP文件路径,然后打印该BMP文件。虽然我在谷歌上找到了一些信息,但所有的努力都没有任何成果。感谢任何帮助。
当前更新:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main ()
{
TCHAR szDriver[16] = _T("WINSPOOL");
TCHAR szPrinter[256];
DWORD cchBuffer = 255;
HDC hdcPrint = NULL;
HDC hdcPrintImg = NULL;
HANDLE hPrinter = NULL;
PRINTER_INFO_2 *pPrinterData;
BYTE pdBuffer[16384];
BOOL bReturn = FALSE;
DWORD cbBuf = sizeof (pdBuffer);
DWORD cbNeeded = 0;
pPrinterData = (PRINTER_INFO_2 *)&pdBuffer[0];
// get the default printer name
bReturn = GetDefaultPrinter(
szPrinter,
&cchBuffer);
if (bReturn) {
// open the default printer
bReturn = OpenPrinter(
szPrinter,
&hPrinter,
NULL);
}
if (bReturn) {
// get the printer port name
bReturn = GetPrinter(
hPrinter,
2,
&pdBuffer[0],
cbBuf,
&cbNeeded);
// this handle is no longer needed
ClosePrinter(hPrinter);
}
if (bReturn) {
// create the Print DC
HBITMAP bmp = (HBITMAP)LoadImage(0, L"print_file.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HBITMAP CreatCompatibleBitmap(bmp);
hdcPrintImg = bmp;
hdcPrint = CreateDC(szDriver, szPrinter,
pPrinterData->pPortName, NULL);
}
if (hdcPrint) {
// Print a test page that contains the string
// "PRINTER TEST" in the upper left corner.
//Escape(hdcPrint, STARTDOC, 8, "Test-Doc", NULL);
//TextOut(hdcPrint, 50, 50, _T("PRINTER TEST"), 12);
BitBlt(hdcPrint, 0, 0, 3300, 2550, hdcPrintImg, 0, 0, SRCCOPY);
//Escape(hdcPrint, NEWFRAME, 0, NULL, NULL);
//Escape(hdcPrint, ENDDOC, 0, NULL, NULL);
// Delete the printer DC.
DeleteDC(hdcPrint);
}
}