解决方案 »

  1.   

    放大图像其实相当于将显示设备的视口缩小,因为图像大小未变,所以在同样的屏幕中看到的图像就变大了。
    使用ScaleViewportExt()函数,修改视区边界相对于当前值。例: // 此处处理显示的新的坐标起点
    CScrollView::OnPrepareDC(pDC, pInfo);
    if(pDC->IsPrinting())
    return; // 如果是打印则结束
    ASSERT(m_Zoom > 0.0f); // 缩放因子合法性检查
    int denom(1000); // 比例因子
    int num((int)(m_Zoom * (float)denom)); // 放大倍数=缩放因子*比例因子
    // 映射模式为设备模式
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->ScaleWindowExt(denom, 1, denom, 1); // 改变窗口扩展值
    num *= denom;
    pDC->ScaleViewportExt(num, // X轴放大倍数
    denom, // X轴比例因子
    num, // Y轴放大倍数
    denom); // Y轴比例因子
    // 显示基准点位于m_orgPoint中
    pDC->SetViewportOrg(OffsetDocument()); // ** 此处设置了显示的基点后,在随后的显示中被应用