ClearType がオンのときに実際のテキストの寸法を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1259914

  •  12-09-2019
  •  | 
  •  

質問

GDI を頻繁に使用する Win32 GUI アプリケーションがあります。指定された座標のビットマップ上にテキストを描画し、後でそれを消去して元のビットマップに置き換える必要があります。

私は次のように進めます。

  • フォント (GetStockObject( DEFAULT_GUI_FONT))、ブラシ、その他のものをデバイス コンテキストに選択します
  • GetTextExtentPoint32() を呼び出してテキストのサイズを計算します。
  • テキストの開始点が得られたので、予想されるテキストの四角形を計算して保存できます。
  • 同じ開始点と同じテキストを持つ同じデバイス コンテキストに対して TextOut() を呼び出します。

その後、ストア四角形のビットマップを復元します。

ClearType アンチエイリアスがオフの場合は正常に動作します。ただし、ClearType を使用すると、GetTextExtentPoint32() によって返されるサイズは、TextOut() が呼び出されたときにテキストが実際に占めるサイズよりわずかに小さくなります。そのため、後で元のビットマップを復元すると、テキストの小さなストライプが所定の位置に残り、アーティファクトが生じます。

ClearTypeを無効にせずにこれを解決する方法はありますか?

役に立ちましたか?

解決

また、のDrawText にして試みることができます文字列のサイズを計算するDT_CALCRECT。多分それはうまく動作します。

また、あなたは、あなたがDT_CALCRECTを取得し、それはそれは少し大きい場合にはテキストをクリップします1に等しいサイズの長方形の中のDrawTextで文字列を書き込むことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top