ClearType가 켜져있을 때 실제 텍스트 차원을 얻는 방법은 무엇입니까?
문제
GDI를 사용하는 Win32 GUI 응용 프로그램이 있습니다. 지정된 좌표에서 비트 맵 위에 텍스트를 그려야하고 나중에 지우고 원래 비트 맵으로 대체해야합니다.
나는 다음과 같이 진행한다 :
- font (getStockoBject (default_gui_font)), 브러시, 기타 재료를 장치 컨텍스트로 선택하십시오.
- 텍스트 크기를 계산하려면 getTexTextentPoint32 ()를 호출합니다.
- 이제 텍스트 시작점이 있으면 예상 텍스트 사각형을 계산하고 저장할 수 있습니다.
- 동일한 시작점과 동일한 텍스트를 가진 동일한 장치 컨텍스트에 대해 Textout () 호출
나중에 상점 사각형의 비트 맵을 복원하십시오.
ClearType antialiasing이 꺼져있을 때 잘 작동합니다. 그러나 getTexTextentPoint32 ()에 의해 반환 된 크기의 ClearType을 사용하면 Teptout ()가 호출 될 때 실제로 텍스트가 차지하는 크기보다 약간 작습니다. 그래서 나중에 원래 비트 맵을 복원하면 텍스트의 작은 줄무늬가 제자리에 남아 있으며 아티팩트가 있습니다.
ClearType를 비활성화하지 않고이 문제가 있습니까?
해결책
당신은 또한 시도 할 수 있습니다 DrawText DT_CALCRECT로 문자열 크기를 계산합니다. 어쩌면 더 잘 작동 할 수도 있습니다.
또한 DT_CALCRECT와 같은 크기와 동일한 크기의 사각형으로 드로 드 텍스트로 문자열을 쓸 수 있으며 텍스트가 조금 더 크면 텍스트를 클립합니다.
제휴하지 않습니다 StackOverflow