【问题标题】:Using CreateCompatibleDC with mapping modes other than MM_TEXT将 CreateCompatibleDC 与 MM_TEXT 以外的映射模式一起使用
【发布时间】:2010-11-18 05:44:33
【问题描述】:

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

绘图代码当前使用 CViews OnDraw 方法和提供的 CDC 对象直接绘制到屏幕上。我正在尝试使用 CreateCompatibleDC / CreateCompatibleBitmap 组合将其绘制为位图并将位图传送到屏幕上,如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 以绘制位图,或者是否有另一种方法来克服这个问题。

【问题讨论】:

  • 您是在将位图选择到兼容 DC 之前还是之后设置映射模式?当我未能创建正确类型的位图或根本无法选择它时,我看到了全黑的结果。我想知道位图尺寸是否根据映射模式进行解释。

标签: c++ bitmap mfc gdi


【解决方案1】:

您可能还需要致电SetWindowExtSetViewportExt。我之前肯定使用过带有位图 DC 的 MM_ISOTROPIC,它工作正常(因为移植到 GDI+,所以手头没有代码)

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2020-05-15
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多