Предосмотр - многоцветный, а на принтере - малоцвет?
От: fiat lux Украина  
Дата: 21.04.05 12:57
Оценка:
При предосмотре все отлично, а на принтере малоцвет (на лазерном — черный и белый, а на струйнике — синий, красный, белый)

void CPeopleFormView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
    CCardPhotoDoc *pDoc = (CCardPhotoDoc *)GetDocument();

    int iFirst = -1,
        iLast = 0;

    COnePeople *p=NULL;

    for (int i=0; i<m_PrintArray.GetSize(); i++) {

        p=(COnePeople *)m_PrintArray.GetAt(i);

        if (iFirst==-1 && p->m_iPage == (int)pInfo->m_nCurPage)
            iFirst=i;

        if (p->m_iPage == (int)pInfo->m_nCurPage)
            iLast=i;
    }


    CDC dc;

    dc.CreateCompatibleDC(pDC);

    for(i=iFirst;i<=iLast;i++) {

        p=(COnePeople *)m_PrintArray.GetAt(i);

        CDrawPage *pPage=pDoc->m_pDrawPageList->GetPageByID(p->m_iMaket);
        ASSERT(pPage!=NULL);
        
        CDrawPage page;

        page.Duplicate(pPage);
        page.SetRatio(pDC);
        page.PreparePrint(p,&pDoc->m_listPeople,&g_dServer);
        
        CBitmap bitmap,*pBitmap;

        bitmap.CreateCompatibleBitmap(pDC,page.Width(),page.Height());
        pBitmap=dc.SelectObject(&bitmap);//->DeleteObject();

        page.DrawAll(&dc);

        int x,y;//,xs,ys;
                x=MulDiv(m_Mergins.left+p->m_iX+page.GetOriginXMM(),pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(HORZSIZE)*100);
        y=MulDiv(m_Mergins.top+p->m_iY+page.GetOriginYMM(),pDC->GetDeviceCaps(VERTRES),pDC->GetDeviceCaps(VERTSIZE)*100);

        pDC->SetStretchBltMode(COLORONCOLOR);
        pDC->BitBlt(x,y,page.Width(),page.Height(),&dc,0,0,SRCCOPY);

        OnDraw(pDC);
        
        dc.SelectObject(pBitmap);
        bitmap.DeleteObject();

    }

    ReleaseDC(&dc);

}


Причем pDC->GetCurrentBitmap() дает двухцветный битмап, т.е. он там, видимо, при создании выбран (SelectObject), а другой битмап выбрать не получается...
dixitque Deus fiat lux et facta est lux...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.