Несоответствие между предварительным просмотром и реальным выводом на печать - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу напечатать растровое изображение.Чтобы избежать печати небольшого растрового изображения, я установил режим CScrollView как MM_LOMETRIC с размерами 3830 x 1995. Я создал растровое изображение и сделал битовый бит на экране.На экране и при предварительном просмотре все было так, как я хочу, но когда я печатал документ, у меня получалось очень плохой результат .

То же изображение при предварительном просмотре.

Мне кажется, что принтер не видит растровое изображение так же, как предварительный просмотр печати. ​​

Обратите внимание, что первый прямоугольник помещается непосредственно на DC, а memDC помещается вit.

Есть ли идеи, как исправить это несоответствие между предыдущей печатью и реальной печатью?

Файлы проекта

void OnDraw()
{
    CPen pen;
    pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
    CPen* OldPen = pDC->SelectObject(&pen);

    CRect rcView;
    GetClientRect(rcView);
    int iClientWidth = rcView.right;
    int iClientHeight = rcView.bottom;
    int iMemWidth = 1900;
    int iMemHeight = 950;
    CDC memDC;
    CBitmap memBitmap;
    memDC.CreateCompatibleDC(pDC);
    memBitmap.CreateCompatibleBitmap(pDC, iMemWidth, iMemHeight);
    memDC.SelectObject(&memBitmap);
    memDC.SetMapMode(MM_LOMETRIC);
    CPen pen1;
    pen1.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
    memDC.SelectObject(&pen1);
    CBrush brBK;
    brBK.CreateSolidBrush(RGB(255, 255, 255));
    memDC.SelectObject(&brBK);
    RECT rc;
    rc.left = 0;
    rc.top = 0;
    rc.right = iMemWidth;
    rc.bottom = iMemHeight;
    memDC.FillRect(&rc, &brBK);
    memDC.Rectangle(rc.left, rc.top, rc.right, -rc.bottom);
    memDC.MoveTo(0, 0);
    memDC.LineTo(1900, -950);

    memDC.MoveTo(0, -950);
    memDC.LineTo(200, -750);

    CFont font;
    font.CreateFont(
        50,                        // nHeight
        0,                         // nWidth
        0,                         // nEscapement
        0,                         // nOrientation
        FW_NORMAL,                 // nWeight
        FALSE,                     // bItalic
        FALSE,                     // bUnderline
        0,                         // cStrikeOut
        ANSI_CHARSET,              // nCharSet
        OUT_DEFAULT_PRECIS,        // nOutPrecision
        CLIP_DEFAULT_PRECIS,       // nClipPrecision
        DEFAULT_QUALITY,           // nQuality
        DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
        _T("Arial"));
    memDC.SelectObject(&font);
    memDC.TextOut(100, -100, _T("Hello"));


    pDC->BitBlt(10, -10, iMemWidth, -iMemHeight, &memDC, 0, 0, SRCCOPY);
    font.DeleteObject();
    brBK.DeleteObject();
    memDC.DeleteDC();
    memBitmap.DeleteObject();
    pen.DeleteObject();
    pen1.DeleteObject();
}

void OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();

    CSize sizeTotal;
    sizeTotal.cx = 3830;
    sizeTotal.cy = 1995;
    SetScrollSizes(MM_LOMETRIC, sizeTotal);
}
...