将CreateCompatibleDC与MM_TEXT以外的映射模式一起使用

时间:2009-08-10 09:10:59

标签: c++ bitmap mfc gdi

我有一个可视化C ++应用程序,它使用CView派生类来呈现其显示,主要是3d矢量数据和真实类型文本。使用的映射模式是MM_ANISOTROPIC或MM_LOMETRIC。我不能使用MM_TEXT,因为我使用相同的代码打印和绘制数据,还必须克服非方形屏幕像素问题。

当前的绘图代码使用CViews OnDraw方法和提供的CDC对象直接绘制到屏幕上。我正在尝试使用CreateCompatibleDC / CreateCompatibleBitmap组合将绘图替换为位图并将位图blit到屏幕,如MS documentation和其他地方所述。

问题在于DC与MM_TEXT以外的映射模式不兼容,因此我的视图呈现倒置且错误的比例。调查显示如下;

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_TEXT以绘制到位图,或者是否有其他方法可以解决此问题。

1 个答案:

答案 0 :(得分:2)

您可能还需要拨打SetWindowExtSetViewportExt。我之前肯定使用了MM_ISOTROPIC和位图DC,并且它工作正常(没有代码可以移植,因为它移植到GDI +)