我采用了世界坐标系后,当设置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);这样的代码能工作,但是很难看,有什么办法可以解决这个问题的? 请高手赐教!谢谢
::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);这样的代码能工作,但是很难看,有什么办法可以解决这个问题的? 请高手赐教!谢谢
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);
你可以试试上面的(我没有试过)
不用大括号的话,是不是要加上g.dispose();或者g.destroyHandle()来手工释放m_hdc阿?