代码之家  ›  专栏  ›  技术社区  ›  SmacL

将CreateCompatibleDC与mm_文本以外的映射模式一起使用

  •  0
  • SmacL  · 技术社区  · 16 年前

    我有一个VisualC++应用程序,它使用CVIEW派生类来呈现它的显示,它主要是3D矢量数据和真实类型文本。所使用的映射模式是“mm_各向异性”或“mm_洛美”。我不能使用mm_文本,因为我使用相同的代码来打印和打印数据,还必须克服非方形屏幕像素问题。

    绘图代码当前使用cView OnDraw方法和提供的cdc对象直接绘制到屏幕上。我正在尝试将此替换为绘制到位图,并使用createCompatibleDC/createCompatibleBitmap组合将位图Blitting到屏幕,如中所述。 MS documentation 在别处。

    问题是,dcs与mm_文本以外的映射模式不兼容,因此我的视图呈现颠倒,比例错误。调查显示:

    void CMyView::OnDraw(CDC *pDC)
    {
        CDC MyDC = CreateCompatibleDC(pDC); // Create a new memory DC;
        int a = pDC->GetMapMode(),b = MyDC.GetMapMode();
    '
    '
    '
    }
    
    a = 2
    b = 1
    

    在mydc上调用setmapmode会导致显示完全为黑色。我是否需要重写我的代码以适合绘制位图的mm_文本,或者是否有其他方法来解决这个问题。

    1 回复  |  直到 11 年前
        1
  •  2
  •   Phil Devaney    16 年前

    你可能还需要打电话 SetWindowExt SetViewportExt . 我以前肯定在Bitmap DC中使用了mm_各向同性,并且它工作正常(没有要处理的代码,因为它已经移植到了gdi+)

    推荐文章