ClearType가 켜져있을 때 실제 텍스트 차원을 얻는 방법은 무엇입니까?

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

  •  12-09-2019
  •  | 
  •  

문제

GDI를 사용하는 Win32 GUI 응용 프로그램이 있습니다. 지정된 좌표에서 비트 맵 위에 텍스트를 그려야하고 나중에 지우고 원래 비트 맵으로 대체해야합니다.

나는 다음과 같이 진행한다 :

  • font (getStockoBject (default_gui_font)), 브러시, 기타 재료를 장치 컨텍스트로 선택하십시오.
  • 텍스트 크기를 계산하려면 getTexTextentPoint32 ()를 호출합니다.
  • 이제 텍스트 시작점이 있으면 예상 텍스트 사각형을 계산하고 저장할 수 있습니다.
  • 동일한 시작점과 동일한 텍스트를 가진 동일한 장치 컨텍스트에 대해 Textout () 호출

나중에 상점 사각형의 비트 맵을 복원하십시오.

ClearType antialiasing이 꺼져있을 때 잘 작동합니다. 그러나 getTexTextentPoint32 ()에 의해 반환 된 크기의 ClearType을 사용하면 Teptout ()가 호출 될 때 실제로 텍스트가 차지하는 크기보다 약간 작습니다. 그래서 나중에 원래 비트 맵을 복원하면 텍스트의 작은 줄무늬가 제자리에 남아 있으며 아티팩트가 있습니다.

ClearType를 비활성화하지 않고이 문제가 있습니까?

도움이 되었습니까?

해결책

당신은 또한 시도 할 수 있습니다 DrawText DT_CALCRECT로 문자열 크기를 계산합니다. 어쩌면 더 잘 작동 할 수도 있습니다.

또한 DT_CALCRECT와 같은 크기와 동일한 크기의 사각형으로 드로 드 텍스트로 문자열을 쓸 수 있으며 텍스트가 조금 더 크면 텍스트를 클립합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top