Bitmap drucken
-
Hallo!
Ich möchte in meinem Programm (dialogfeld-basierend) ein Bitmap ausdrucken.
Ich habe es schon mit BitBlt() u. StretchBlt() versucht, jedoch spuckt mein Drucker dann nur eine leere Seite aus. Ich weiß, das nicht jeder Drucker diese Befehle unterstützt.
Gibt es eine andere Lösung, die auf allen Druckern funktioniert???greetz
tompo
-
Weiß denn niemand eine Antwort???
tompo
-
Hallo,
wenn du dir über z.B. CPrintDlg den CDC des Druckers geholt hast kannst du über BitBlt das Bitmap drucken. Wenn das bei dir nicht geht, liegt es vielleicht am Drucker. Könnte aber auch am Code liegen, den müsstest du mal posten.
Mfg CLoop
-
Sorry, dass ich erst so spät schreibe, hatte bis jetzt keine Zeit...
Also hier ist mein Code, den ich aus VCPP in 21 Tagen und einem Beitrag im Forum von Codeguru zusammengebastelt habe:
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); if (dlgPrint.DoModal()==IDOK){ // Den Drucker-DC vom Dialogfeld mit einem // CDC-Objekt verbinden CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); // Eine DOCINFO-Struktur erzeugen und füllen DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "Programmname"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; // Ausdruck des Dokuments starten if (dcPrint.StartDoc(&myPrintJob)>=0) { // Eine Seite beginnen dcPrint.StartPage(); // 1. Load the bitmap with CBitmap::LoadBitmap() CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP); // get the bitmap's size BITMAP BM; bmp.GetObject(sizeof(BM),&BM); long lBmpHeight = BM.bmHeight; long lBmpWidth = BM.bmWidth; // 2. Create a memory device context, compatible to the screen CDC memDC; memDC.CreateCompatibleDC(&dcPrint); // 3. Select the bitmap into it with CDC::SelectObject() CBitmap* pOldBitmap = memDC.SelectObject(&bmp); // 4. Blit (or stretch-blit) the mem-DC into the printer-DC dcPrint.StretchBlt(0,0,500,500,&memDC,0,0,lBmpHeight,lBmpWidth,SRCCOPY); // 5. deselect the bitmap from the mem-DC memDC.SelectObject(pOldBitmap); // 6. destroy the bitmap and the mem-DC bmp.DeleteObject(); memDC.DeleteDC(); // Seite auswerfen dcPrint.EndPage(); // Dokument schließen dcPrint.EndDoc(); } // Druckergerätekontext löschen dcPrint.DeleteDC(); }
Weiß jemand, wo der Fehler liegt?
greetz tompo