Druckfehler
-
Seltsam, und beim Debuggen gibt er auch überall die richtigen Werte an?
-
hier
das ist der sourcecode dazu
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); //dlgPrint.GetDefaults(); if (dlgPrint.DoModal() == IDOK) { CDC pDC_print; // Den Drucker-DC vom Dialogfeld mit einem // CDC-Objekt verbinden pDC_print.Attach(dlgPrint.GetPrinterDC()); // Eine DOCINFO-Struktur erzeugen und füllen DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "MeinDruckAuftrag"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; pDC_print.SetMapMode(MM_LOMETRIC); if (pDC_print.StartDoc(&myPrintJob)>=0) { // Eine Seite beginnen pDC_print.StartPage(); CBitmap bmp; bmp.LoadBitmap(IDB_LOGO); BITMAP bm; bmp.GetBitmap(&bm); CDC sdc; sdc.CreateCompatibleDC(&pDC_print); sdc.SelectObject(&bmp); const int nBreite = (int)(bm.bmWidth * 1.5); const int nHoehe = (int)(bm.bmHeight * 1.5); pDC_print.StretchBlt(pDC_print.GetWindowExt().cx - nBreite, 0, nBreite, -nHoehe, &sdc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); // Seite auswerfen pDC_print.EndPage(); // Dokument schließen pDC_print.EndDoc(); } // Druckergerätekontext löschen pDC_print.DeleteDC(); }
-
Schick. Überhaupt keine Fehlerbehandlung.
-
ja, die fehlerbehandlung brauch ich ja eigentlich nur in den Bitmap reinpacken, weil der rest funzt ja
nur was soll ich da abfragen?
-
warte, ich bastel die mal eben rein und poste dann nochmal den code
-
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); //dlgPrint.GetDefaults(); if (dlgPrint.DoModal() == IDOK) { CDC pDC_print; // Den Drucker-DC vom Dialogfeld mit einem // CDC-Objekt verbinden pDC_print.Attach(dlgPrint.GetPrinterDC()); // Eine DOCINFO-Struktur erzeugen und füllen DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "MeinDruckAuftrag"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; pDC_print.SetMapMode(MM_LOMETRIC); if (pDC_print.StartDoc(&myPrintJob)>=0) { // Eine Seite beginnen pDC_print.StartPage(); CBitmap bmp; if ( bmp.LoadBitmap(IDB_WIRA) == 0 ) MessageBox("Fehler bei Laden",NULL,MB_OK); BITMAP bm; if ( bmp.GetBitmap(&bm) == NULL ) MessageBox("Fehler2",NULL,MB_OK); CDC sdc; if ( sdc.CreateCompatibleDC(&pDC_print) == 0 ) MessageBox("Fehler",NULL,MB_OK); if ( sdc.SelectObject(&bmp) == NULL ) MessageBox("Fehler3",NULL,MB_OK); const int nBreite = (int)(bm.bmWidth * 1.5); const int nHoehe = (int)(bm.bmHeight * 1.5); if ( pDC_print.StretchBlt(pDC_print.GetWindowExt().cx - nBreite, 0, nBreite, -nHoehe, &sdc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY) == 0 ) MessageBox("Nicht gedruckt",NULL,MB_OK); // Seite auswerfen pDC_print.EndPage(); // Dokument schließen pDC_print.EndDoc(); } // Druckergerätekontext löschen pDC_print.DeleteDC(); }
-
Also, wenn ich nen Bitmap lade mache ich das mit GetObject() (nicht mit GetBitmap()):
CBitmap bitmap; bitmap.LoadBitmap(IDB_BACKGROUND); BITMAP bm; bitmap.GetObject(sizeof(bm),&bm); // define default size
Ansonsten, kannst du überprüfen, ob LoadBitmap und GetBitmap die korrekten Werte wiedergeben.
-
aja, schau an
ich bekomme den fehler bei SelectObejct
-
wenn ich die referenzierung rausnehme, kommt was
also funktioniert
im testprojekt *gg*
ich übertrag das mal auf mein aktuelles
ne frage:
worin wäre denn dann der unterschied ob GetObject oder GetBitmap?
-
also bei meinem aktuellen projekt macht er immer fehler bei selectObject
egal ob mit oder ohne referenzierung also &
-
Anscheinend der, dass GetObject() auch auf andere Grafik-Objekte angewendet werden kann und GetBitmap() nur auf ein Bitmap. Macht also hier keinen Unterschied.
Ich hatte es selber nur mit GetObject() gelernt.
-
also nur bei select object spuckt er mir fehler aus
keine ahnung warum
-
sdc, pDC_print und bmp sind alle auch nicht NULL?
Und der selbe Quellcode funktioniert in einem anderen Projekt einwandfrei?
-
mom, ich überprüfe das eben
-
häää?
bin ich jetzt total bräsig?
der macht das nicht
if ( (pDC_print != 0) || (sdc != 0) || (bmp != 0) ) MessageBox("ok",NULL,MB_OK);
-
&&, nicht ||
Alle drei müssen != 0 sein.
-
ja gut
ich hatte zuerst auf gleich NULL abgefragt
deswegen
aber der sagt mir was mit mehrgültigen operatoren
'Operator != ist mehrdeutig'
-
aber die müssen ja ungleich sein, weil sont bei den anderen methoden doch schon nen fehle rkommnen würde
das problem ist bei selectObejct
aber keine ahnung warum
-
Und wenn du nur schreibst:
if (pDC_print && sdc && bmp) MessageBox("ok",NULL,MB_OK);
-
kommen alle mit TRUE zurück