Druckfehler



  • darauf wäre zu schließen, aber die EXE, die ich gestern erstellt habe, wurde weder verschoben noch neu compiliert noch sonst was und da funzt es ja auch nicht



  • 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);
    

Anmelden zum Antworten