Drucken mit Mfc
-
Ich würde gerne eine CPP-Funktion programmieren, die eine Datei vom Typ Windows-BMP auf DINA4 ausdruckt, wenn Laufwerk, Pfad, und Seitenmaße als Parameter übergeben werden. Wichtig ist, daß der linke Rand, der obere Rand, die Seitenhöhe und die Seitenbreite exakt ausgedruckt wird. Kann man sowas mit Mfc programmieren?
-
Hallo,
ja das geht mit den MFC.
1. Zuerst muss man das Koordinatesystem mit ScreenToClient bzw. ClientToScreen bestimmen.
2. über die folgende Funktion die man selber implementieren muss holt man sich den Drucker-Handle:
HDC CLVTestDlg::GetPrinterDC()
{
static DWORD dwNeeded, dwReturned;
HDC hdc;
static PRINTER_INFO_4* pinfo4;
static PRINTER_INFO_5* pinfo5;if(GetVersion() & 0x80000000)
{ // Windows 98
// *********** Ermittelt den Platzbedarf für die Struktur PRINTER_INFO_5 *********************
EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, NULL, 0, &dwNeeded, &dwReturned);// **************** fügt Daten in die Struktur ein *******************************************
pinfo5 = (PRINTER_INFO_5*)malloc(dwNeeded);
EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE)pinfo5, dwNeeded, &dwNeeded, &dwReturned);hdc = CreateDC(NULL, pinfo5->pPrinterName, NULL, NULL);
free(pinfo5);
}else
{ // Windows NT
EnumPrinters(PRINTER_ENUM_NETWORK, NULL, 4, NULL, 0, &dwNeeded, &dwReturned);pinfo4 = (PRINTER_INFO_4*)malloc(dwNeeded);
EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 4, (PBYTE)pinfo4, dwNeeded, &dwNeeded, &dwReturned);hdc = CreateDC(NULL, pinfo4->pPrinterName, NULL, NULL);
free(pinfo4);
}
return hdc;
}3. Wenn man den Handle hat, kann man mittels der Funktion GetDeviceCaps(...), informationen über den Drucker bekommen (wie z.B. horizontale und vertikale Pixelbreite). Das steht alles ganz gut in der Dokumentation der MSDN drinne.
4. Jetzt muss man nur noch den Algorithmus bestimmen und zwischen
if (StartDoc(...)
StartPage(...);
...
EndPage(...);
EndDoc(...);implementieren.
Hoffe ich konnte weiterhelfen
MfG