Druckfehler



  • Hallo.

    Eigentlich dachte ich, der Tag würde gut anfangen. Naja, dem ist nicht so.

    Folgendes: Habe gestern Druckausgabe geschrieben wo auch Logo mitgedruckt wird etc. Funktionierte alles wunderbar. Hab dann gestern zu Hause noch ein bissl weiter gemacht und als ich heut morgen das neu compilierte gedruckt habe, kam kein Logo. Nicht weiter tragisch. Bin dann in die letzte Version von gestern gegangen, hab NICHTS verändert sondern einfach nur die EXE ausgeführt und siehe da: kein Logo.

    Wo liegt bitte hier der Fehler???



  • Hast du dein Logo vielleicht gelöscht? Als du dein Programm mit nach Hause genommen hast.



  • 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


Anmelden zum Antworten