Delphi SetMapMode 反转文本

Delphi SetMapMode Inverts Text

我正在开发一个图形应用程序,并且有许多对象带有说明文字。为了放置字幕,我计算了 X、Y 坐标并调用:

Canvas.TextOut(XText, YText, FCaption);

我决定使用不同的映射模式来简化从世界 space 到设备 space 的转换:

SetGraphicsMode(cnv.Handle, GM_ADVANCED);
SetMapMode(pbxMain.Canvas.Handle, MM_HIENGLISH);

现在我的字幕打印颠倒了,但仍然是从左到右。

有什么补救方法吗?

我考虑过的一种方法是将地图模式设置回默认输出文本,这需要进行一些转换才能在不同模式下获得 X、Y。这是一个合理的策略吗?在绘制程序期间更改地图模式是否“正确”...?

虽然当您设置 MM_HIENGLISH 地图模式时 y 轴反转,假设先前的默认值为 MM_TEXT,它不会导致文本输出颠倒 - 它只会影响位置它的输出。

您可能需要检查您是否正在调用 SetWorldTransform,这可能是您观察到的问题的原因 - 错误转换。转换结构参数 eM22 中的负值会导致 y 轴反射。

关于最后一部分,我没有发现在单个绘图任务期间切换地图模式有任何问题,除了它可能会使代码维护变得复杂。