Druckfehler



  • 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



  • seltsam.
    dann probier es vielleicht doch noch mal mit GetObject().
    Nur komisch, dass dein anderes Programm funktioniert.
    Hast du die nochmal komplett miteinander verglichen?

    (Bin für ne Stunden nun abwesend.)


Anmelden zum Antworten