代码之家  ›  专栏  ›  技术社区  ›  Roel

SetWorldTransform()和字体旋转

  •  1
  • Roel  · 技术社区  · 15 年前

    通过使用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度)轴,它试图通过反锯齿来“优化”。

    1 回复  |  直到 15 年前
        1
  •  1
  •   ChrisN    15 年前

    你试过设置 nEscapement nOrientation SetWorldTransform ? 见 CreateFont 详细情况。