我采用了世界坐标系后,当设置Y轴正向向上时,显示出来的文本是倒起的,大家可能有这个经验吧?那通常该如何显示正确的文本呢?我的做法是先把Y轴变成正向向下,显示文本后再把坐标恢复过来。大家有没有更好的办法?另外,这样的做法在使用GDI+时遇到了点问题,请看下面的代码:GetClientRect(&rect);
::SetViewportExtEx(m_hdc, rect.right, rect.bottom, NULL); //设置Y轴正向向下::TextOut(m_hdc,100,100,_T("Hello"),5);::SetViewportExtEx(m_hdc, rect.right, -rect.bottom, NULL);//恢复坐标系这段代码工作得很好,下面是用GDI+来实现的代码GetClientRect(&rect);
::SetViewportExtEx(m_hdc, rect.right, rect.bottom, NULL);Graphics g(m_hdc);
g.DrawString(L"Hello", -1, &font, pointF, &solidBrush);//下面这行语句执行后没有效果
::SetViewportExtEx(m_hdc, rect.right, -rect.bottom, NULL);我发现原因可能是Graphics内部对m_hdc进行了什么锁定之类的,导致后面那个语句没有用,于是现在我只能这样做:GetClientRect(&rect);
::SetViewportExtEx(m_hdc, rect.right, rect.bottom, NULL);{
  Graphics g(m_hdc);
  g.DrawString(L"Hello", -1, &font, pointF, &solidBrush);
}::SetViewportExtEx(m_hdc, rect.right, -rect.bottom, NULL);这样的代码能工作,但是很难看,有什么办法可以解决这个问题的? 请高手赐教!谢谢

解决方案 »

  1.   

    在GDI下面没有遇到这个问题。
      

  2.   

    用WIN2000的世界坐标系,就有这个问题,你可以试试
      

  3.   

    When you use this constructor to create a Graphics object, make sure that the Graphics object is deleted or goes out of scope before the device context is released.
    GetClientRect(&rect);
    ::SetViewportExtEx(m_hdc, rect.right, rect.bottom, NULL);{
    Graphics g(m_hdc);
    g.ReleaseHDC(m_hdc);
    }::SetViewportExtEx(m_hdc, rect.right, -rect.bottom, NULL);
    你可以试试上面的(我没有试过)
      

  4.   

    对象遇到大括号就会释放资源,m_hdc才被释放,之后才能正常使用。
    不用大括号的话,是不是要加上g.dispose();或者g.destroyHandle()来手工释放m_hdc阿?
      

  5.   

    我试过不用大括号,调用g.ReleaseHDC(m_hdc), 但是布行