【发布时间】: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 之前还是之后设置映射模式?当我未能创建正确类型的位图或根本无法选择它时,我看到了全黑的结果。我想知道位图尺寸是否根据映射模式进行解释。