为什么我用BitBlt到客户区中的图形,在打印预览中不能正确显示,分不多,大家帮帮我
如果直接用pDC->TextOut(33,3434,"asdfds");可以在打印预览中显示
但我用pDC->BitBlt(r.left,r.top,r.Size().cx,r.Size().cy,&mDC,r.left,r.top,SRCCOPY);
只会显示一小块,显示的一小块不是那种客户区缩小形的,是残缺的那种一小块!!
是不是BitBlt根本就不能打印预览???请指教,谢谢
/////////////////////////////////////////////////////////
CBitmap bmp;
CDC mDC;
mDC.CreateCompatibleDC(pDC);
CRect r;
GetClientRect(&r);
CRect rD;
rD.CopyRect(&r);
pDC->LPtoDP(&rD);
CRect rect;
int gcWidth,gcHeight;
GetClientRect(&rect);
gcWidth=rect.Width();
gcHeight=rect.Height();
mDC.SetMapMode(MM_HIMETRIC);
bmp.CreateCompatibleBitmap(pDC,2000,1000);
mDC.SelectObject(&bmp);
CBrush myBrush;
myBrush.CreateSolidBrush(RGB(255,0,0));
pDC->DPtoLP(&r);
mDC.FillRect(&r,&myBrush);
CElecDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rectBound(1000,-1000,28500,-18500), rectShadow(rectBound);
CBrush *oldBrush, bkBrush(m_rgbBoardColor), bkShadowBrush(RGB(192,192,192));//bkBrush(&bmpBK), bkShadowBrush(RGB(192,192,192));
CPen *pOldPen, penShadow(PS_NULL, 0, RGB(0, 0, 0));
pOldPen = mDC.SelectObject(&penShadow);
oldBrush = mDC.SelectObject(&bkShadowBrush);
pOldPen = pDC->SelectObject(&penShadow);
oldBrush = pDC->SelectObject(&bkShadowBrush);
rectShadow.OffsetRect(150, -150);
mDC.Rectangle(rectShadow);
mDC.SelectObject(&bkBrush);
mDC.Rectangle(rectBound);
//pDC->Rectangle(rectBound);
mDC.SelectObject(pOldPen);
mDC.SelectObject(oldBrush);
/*绘制链表中的各个元器件*/
POSITION pos = pDoc->m_ChipObList.GetHeadPosition();
CObject *pObject;
CResistor *pResistor;
CLine *pLine;
CComponent *pComponent;
CBrush fillBrush(m_rgbFillColor);
oldBrush = mDC.SelectObject(&fillBrush);
//pDC->TextOut(3434,-1434,"sdfsdfkjsdfjask");////注意这句话
while (pos != NULL)
{
pObject = pDoc->m_ChipObList.GetAt(pos);
pComponent = (CComponent *)pObject;
if (pObject->IsKindOf(RUNTIME_CLASS(CResistor)))
{
pResistor = (CResistor *)pObject;
pResistor->m_RectTracker.m_rect = pResistor->m_RectLP;
mDC.LPtoDP(pResistor->m_RectTracker.m_rect);
if (pResistor->GetIsSelected())
{
pResistor->m_RectTracker.Draw(&mDC);
}
}
if (pObject->IsKindOf(RUNTIME_CLASS(CLine)))
{
pLine = (CLine *)pObject;
}
pComponent->Draw(&mDC);
//pComponent->Draw(pDC);
pDoc->m_ChipObList.GetNext(pos);
}
point1.x=r.left;
point1.y=r.top;
mDC.LPtoDP(&point1);
pDC->BitBlt(r.left,r.top,r.Size().cx,r.Size().cy,&mDC,r.left,r.top,SRCCOPY);
mDC.SelectObject(oldBrush);