?
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