2009-08-11 79 views
4

我有一個使用GDI的Win32 GUI應用程序。它需要在指定座標上的位圖上繪製文本,然後將其擦除並替換爲原始位圖。如何在ClearType打開時獲得真實的文本尺寸?

我的步驟如下:

  • 選擇字體(GetStockObject(DEFAULT_GUI_FONT)),刷子,其他的東西到設備上下文
  • 呼叫GetTextExtentPoint32()來計算所述文本的大小
  • 現在具有文本起點我可以計算預期的文本矩形並存儲它
  • 調用TextOut()爲相同的設備上下文具有相同的起點和相同的文本

及更高版本恢復存儲矩形的位圖。

當ClearType抗鋸齒關閉時它工作正常。但GetTextExtentPoint32()返回大小的ClearType稍小於調用TextOut()時實際佔用的文本大小。所以當我以後恢復原始位圖時,文本中的一些小條紋保留在原位,並且我有文物。

有沒有任何治療,而不禁用ClearType?

回答

2

您也可以用DT_CALCRECT嘗試DrawText來計算字符串大小。也許它效果更好。

此外,您還可以在矩形內使用DrawText編寫字符串,其大小等於您使用DT_CALCRECT獲取的大小,並且它會在文本稍大時剪切文本。

+0

使用DrawText兩次 - 第一次用於大小計算,然後繪製工作很好,文本沒有變寬。謝謝。 – sharptooth 2009-08-12 05:49:18

+2

缺點是DrawText只支持零擒縱和方向的字體。 – sharptooth 2009-08-12 06:06:02