내 목표 : IDWriteTextFormat 글꼴의 높이를 가져 와서 특정 높이의 IDWriteTextLayout에 맞는 텍스트 줄 수를 계산할 수 있습니다.직접 쓰기 : 글꼴 높이 가져 오기
내 문제 : 트루 타입의에 대한
inline int kmTextCtrl::GetVisLines() const
{
/* pTextFormat is an IDWriteTextFormat pointer, dpi_y is the desktop's vertical dpi,
and GetHeight() returns the height (in pixels) of the render target. */
float size = (pTextFormat->GetFontSize()/72.0f)*dpi_y;
return (int)(GetHeight()/size);
}
계산이 일부 글꼴에 대한 정확한 것 같다,하지만 : 오른쪽 지금은 라인의 보이는 수를 계산하기 위해이 코드를 사용하고 있습니다 글꼴 (예 : Courier New, Arial, Times New Roman). 이 글꼴의 경우 표시된 텍스트는 렌더링 대상의 수직 경계 아래에 잘립니다.
일부 컨텍스트 : 나는 텍스트 컨트롤의 렌더 타겟에 텍스트를 넣어하는 IDWriteTextLayout을 사용하여 버퍼 제어를 다시 스크롤 만드는 중이라서 . GetVisLines()의 결과를 사용하여 원형 버퍼 (선에 의해 std :: strings에 텍스트를 저장함)에서 얼마나 많은 텍스트 행을 가져와 레이아웃 안으로 끌어오고 창을 스크롤하거나 크기를 조정할 때마다 다시 만들 것인지 결정합니다.
"기본"Win32 API C++를 사용하여 수행됩니다.
이것은 분명히 잘못된 접근입니다. 적절한 해결책에 대한 드웨인의 반응을보십시오. – bunglehead
@bunglehead 왜 이것이 잘못된가요? 너무 많은 가정을하기 때문에 @DmitriNesteruk. –
예를 들어 실제 텍스트 데이터에 따라 나중에 다른 글꼴을 사용할 수 있다는 것을 고려하지 않고도 선을 측정하기 시작합니다. 다음으로 라인 간격 모드를 무시하고 레이아웃이 (ascent + descent + lineGap)으로 공간을 계산하는 방식을 가정합니다. 위의 정격 응답을 참조하십시오. 왜 이것이 신뢰할 수없는 솔루션인지 더 잘 설명합니다. – bunglehead