Postupy: Odesílání dat přímo do tiskárny GDI
Ukázka kódu dále v tomto tématu ukazuje, jak odesílat data ovládacích prvků tiskárny přímo do tiskáren, které používají ovladače tiskárny založené na GDI.
Následující postup popisuje, jak odesílat data přímo do tiskárny. Tyto kroky jsou také znázorněny v následujícím příkladu kódu.
- Zavolejte OpenPrinter, abyste získali popisovač tiskárny.
- Inicializujte strukturu DOCINFO daty tiskárny.
- Volání StartDocPrinter indikuje, že aplikace bude odesílat data dokumentu do tiskárny.
- Volání StartPagePrinter indikuje, že aplikace odešle novou stránku na tiskárnu.
- Voláním WritePrinter odešlete data.
- Je nutné zavolat EndPagePrinter a tím označit, že byla odeslána všechna data pro aktuální stránku.
- Zavolejte funkci EndDocPrinter, abyste označili, že všechna data pro tento dokument byla odeslána.
- Voláním ClosePrinter uvolněte prostředky.
Odešlete data ovládacího prvku tiskárny přímo do tiskáren, které používají ovladače tiskárny založené na GDI.
//
// RawDataToPrinter - sends binary data directly to a printer
//
// szPrinterName: NULL-terminated string specifying printer name
// lpData: Pointer to raw data bytes
// dwCount Length of lpData in bytes
//
// Returns: TRUE for success, FALSE for failure.
//
BOOL RawDataToPrinter(LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
BOOL bStatus = FALSE;
HANDLE hPrinter = NULL;
DOC_INFO_1 DocInfo;
DWORD dwJob = 0L;
DWORD dwBytesWritten = 0L;
// Open a handle to the printer.
bStatus = OpenPrinter( szPrinterName, &hPrinter, NULL );
if (bStatus) {
// Fill in the structure with info about this "document."
DocInfo.pDocName = (LPTSTR)_T("My Document");
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = (LPTSTR)_T("RAW");
// Inform the spooler the document is beginning.
dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo );
if (dwJob > 0) {
// Start a page.
bStatus = StartPagePrinter( hPrinter );
if (bStatus) {
// Send the data to the printer.
bStatus = WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten);
EndPagePrinter (hPrinter);
}
// Inform the spooler that the document is ending.
EndDocPrinter( hPrinter );
}
// Close the printer handle.
ClosePrinter( hPrinter );
}
// Check to see if correct number of bytes were written.
if (!bStatus || (dwBytesWritten != dwCount)) {
bStatus = FALSE;
} else {
bStatus = TRUE;
}
return bStatus;
}
Související témata