打印预览和实际打印输出之间不匹配

时间:2018-09-12 10:38:24

标签: visual-c++ printing mfc print-preview

我要打印位图。为了避免打印小的位图,我将CScrollView模式设置为MM_LOMETRIC,尺寸为3830 x1995。我创建了位图,并将位图制作到了屏幕上。屏幕上和打印预览中都有我想要的一切,但是当我打印文档时,我得到了very bad result

print preview上的图片相同。

在我看来,打印机看不到位图的方式与打印预览相同。

第一个错别字直接放在DC上,memDC放入其中的支付附件。

有什么想法可以解决打印预览和实际打印之间的这种不匹配吗?

Project files

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);
}

0 个答案:

没有答案