Problem: Drucken von CBitmap in OnPrint (MFC)
-
Grüsse,
der unten stehende Code durchläuft eine CTreeCtrl Struktur um einen Baum nachzuzeichnen da ich nicht auf das Clipboard zurückgreifen wollte. Der Text wird schön auf die Seiten verteilt, jedoch werden die Bilden von den Roots und Treeitems nur in der PrintPreview korrekt angezeigt, auf dem Papier nach dem Druck fehlen sie.
Leider seh ich den Fehler in dem unten stehenden Code nichtWäre nett wenn mir das jemand erklären kann
So Far Puppet
_______________________________________________________void COutput2::OnPrint(CDC* pDC, CPrintInfo* pInfo) { int nSavedDC = pDC->SaveDC(); // Fussnoten setzen CFont* pOldFont = pDC->SelectObject(&m_fontSet); pDC->SetTextAlign(TA_LEFT|TA_BASELINE); pDC->TextOut(HORZ_MARGIN,VERT_MARGIN,srkChange.strStatus); // Tree initialisieren CTreeCtrl& Tree = m_TreeWnd.GetTreeCtrl(); HTREEITEM hItem=Tree.GetRootItem(); int maxItemCnt = (prntY-VERT_MARGIN*2)/m_nRowHeight-2; // Position im Tree ermitteln for(int pos=0; pos<maxItemCnt*(pInfo->m_nCurPage-1); pos++) { Tree.Expand(hItem,TVE_EXPAND); hItem = Tree.GetNextItem(hItem,TVGN_NEXTVISIBLE); } // Bildquelle übergeben BITMAP bmpInfo; bm.GetBitmap(&bmpInfo); // Speicher anlegen und alten sichern CDC SpeicherDC; SpeicherDC.CreateCompatibleDC(pDC); CBitmap * oldbm = SpeicherDC.SelectObject(&bm); int ItemCnt=0; do { ItemCnt++; // Position ermitteln int x = HORZ_MARGIN+CalculateRootCnt(hItem)*20; int y = VERT_MARGIN+m_nRowHeight*(ItemCnt+1); // Bild ermitteln int nImage, nSelectedImage; Tree.GetItemImage(hItem,nImage,nSelectedImage); // Bild transparent machen (rosa->weiss) for(int picx=0;picx<bmpInfo.bmWidth;picx++) for(int picy=0;picy<bmpInfo.bmHeight;picy++) if(SpeicherDC.GetPixel(picx,picy)==RGB(255,0,255)) SpeicherDC.SetPixel(picx,picy,RGB(255,255,255)); // Bild an DC übergeben pDC->BitBlt(x,y,bmpInfo.bmWidth/4,bmpInfo.bmHeight, &SpeicherDC,bmpInfo.bmWidth/4*nImage,0,SRCCOPY); // Tree-Text verarbeiten CString text = Tree.GetItemText(hItem); char tmp[256]; strcpy(tmp,text); text = strtok( tmp, "\t" ); pDC->TextOut(x+25,y+BIAS,text); text = strtok( NULL, "\t" ); pDC->TextOut(x+25+300,y+BIAS,text); // Tree "aufklappen", nächstes Item Tree.Expand(hItem,TVE_EXPAND); hItem = Tree.GetNextItem(hItem,TVGN_NEXTVISIBLE); } while(hItem && ItemCnt<maxItemCnt); // Fusszeile -> Seitenanzahl CString nPage; nPage.Format(" %d",pInfo->m_nCurPage); nPage = UINTtoCString(IDS_OUT_PAGE) + nPage; pDC->TextOut(prntX/2-nPage.GetLength(),prntY-20,nPage); // alte Objekte zurücksetzen pDC->SelectObject(pOldFont); //pDC->SelectObject(oldbm); pDC->RestoreDC(nSavedDC); } //OnPrint///////////////////////////////////////////////////////////////////
-
Kann keiner helfen?