2010-01-06 16 views
1

我试图在Windows控件上显示文本,旋转90度,以便它从底部到顶部读取可以这么说;基本上它是图的Y轴上的标签。SetWorldTransform()和字体旋转

我得到了我的文字,通过使用SetGraphicsMode(GM_ADVANCED),然后使用

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); 

现在,当我运行我的程序改变我的DC坐标系垂直显示,旋转的文本看起来与同不同文字显示为'正常'(水平)。我尝试过使用固定宽度(系统)字体和默认的WinXP字体。系统字体出来看起来反锯齿,另一个看起来好像它被绘制成比水平版本小1个字体的字体,尽管它们使用相同的DC绘制并且没有字体间的变化。它看起来好像Windows检测到我正在绘制不是沿着正常(0度)轴的字体,而是尝试通过抗锯齿来“优化”。

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

回答

1

你有没有试过,当你创建的字体,而不是使用SetWorldTransform的设置nEscapementnOrientation参数?看CreateFont了解详情。