2009-08-11 3 views
4

GDI를 멋지게 사용하는 Win32 GUI 응용 프로그램이 있습니다. 지정된 좌표에서 비트 맵 위에 텍스트를 그리고 나중에 지우고 원래의 비트 맵으로 대체해야합니다. 내가 같이 진행ClearType이 켜져있을 때 실제 텍스트 크기를 얻는 방법은 무엇입니까?

은 다음과 같습니다

  • 이제 텍스트의 크기를 계산하는 글꼴 선택 (GetStockObject (DEFAULT_GUI_FONT)), 브러쉬, 장치 컨텍스트에 다른 물건
  • 전화 GetTextExtentPoint32() 텍스트 시작점을 가지고 나는 예상 텍스트 사각형을 계산하고 저장할 수있다.
  • 동일한 시작점과 텍스트를 가진 동일한 장치 컨텍스트에 대해 TextOut()을 호출

이상은 저장 사각형의 비트 맵을 복원합니다.

ClearType 앤티 앨리어싱이 해제되어 있으면 잘 작동합니다. 그러나 GetTextExtentPoint32()에 의해 반환 된 크기의 ClearType은 TextOut()이 호출 될 때 실제로 텍스트가 차지하는 크기보다 약간 작습니다. 따라서 나중에 원본 비트 맵을 복원 할 때 텍스트의 작은 줄무늬가 그대로 남아 있으며 유물이 있습니다.

ClearType을 비활성화하지 않고 치료할 수 있습니까?

답변

2

문자열 크기를 계산하려면 DrawText을 DT_CALCRECT와 함께 사용해보십시오. 아마 더 잘 작동 할 것입니다.

또한 DT_CALCRECT로 얻은 크기와 동일한 크기의 사각형 안에 DrawText로 문자열을 쓸 수 있으며 조금 더 큰 경우에 대비하여 텍스트를 자릅니다.

+0

DrawText를 두 번 사용하십시오. 먼저 크기 계산을 위해 그리기 작업을 수행하면 텍스트가 더 넓어지지 않습니다. 고맙습니다. – sharptooth

+2

단점은 DrawText가 이스케이프 및 방향이 0 인 글꼴 만 지원한다는 것입니다. – sharptooth