SetWorldTransform()和字体旋转

时间:2010-01-06 17:14:49

标签: graphics winapi

我正在尝试在Windows控件上显示文本,旋转90度,以便它可以从“从下到上”读取;基本上它是图表Y轴上的标签。

我通过使用SetGraphicsMode(GM_ADVANCED)然后使用

更改DC的坐标系来使文本垂直显示
XFORM transform;
const double angle = 90 * (boost::math::constants::pi<double>() / 180);
transform.eM11 = (FLOAT)cos(angle);
transform.eM12 = (FLOAT)(-sin(angle));
transform.eM21 = (FLOAT)sin(angle);
transform.eM22 = (FLOAT)cos(angle);
transform.eDx = 0.0;
transform.eDy = 0.0;
dc.SetWorldTransform(&transform);

现在,当我运行程序时,旋转的文本看起来与“正常”(水平)显示的文本不同。我尝试使用固定宽度(系统)字体和默认的WinXP字体。系统字体看起来是抗锯齿的,而另一个看起来几乎就像是以比水平版本更小的1像素字体绘制,尽管它们是使用相同的DC绘制的,并且两者之间没有字体更改。看起来好像Windows检测到我正在绘制一个不在正常(0度)轴上的字体,并且它正试图通过消除锯齿来“优化”。

现在我不想要任何这些。我只想要同样的文字,我水平绘制,绘制完全相同,除了旋转90度,这是可能的,因为它是一个正好旋转90度。有谁知道发生了什么,我是否可以轻松地改变这个以便按我的意愿工作?我不想经历所有这些麻烦,发现我将不得不求助于渲染到屏幕外的位图,使用简单的逐像素旋转旋转它,并且必须将其转换为我的控件:(

1 个答案:

答案 0 :(得分:1)

您是否尝试在创建字体而不是使用nEscapement时设置nOrientationSetWorldTransform参数?有关详细信息,请参阅CreateFont