문제

Direct2d/DirectWrite에서 텍스트를 렌더링하고 있지만 SetLineSpacing() TextFormat 또는 TextLayout에서는 영향을 미치지 않는 것 같습니다. 왜 그런지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

나는 이것이 버그라고 확신합니다. 나는 최근 Direct2d와 약간의 놀이를했고 또한 문제가있었습니다. SetLineSpacing() TextLayout에서, 그것이 당신이 묘사 한 것과 동일하다고 생각합니다.이 경우 나는 그것이 당신만이 아니라는 것을 확인할 수 있습니다. MS Connect에서 버그 보고서를 다시 열면 폐쇄되었습니다.

다른 팁

Dmitri Nesteruk과 같은 문제도 가지고 있습니다.

그러나 "CreateTextLayout 이후"라인 스케이싱을 설정하면 SetLinesPacing이 작동 할 수 없습니다.

그렇지 않으면 CreateTextLayout 전에 라인 스케acing을 설정하면 지금 작동 할 수 있습니다.

어쩌면 당신은이 솔루턴을 시도 할 수 있습니다.

추신 : 내 env. Window Vista SP2에 있습니다.

많은 감사합니다.

불행히도 당신은 당신이하려는 일을 보여주는 코드를 제공하지 않습니다. 나는 당신이 다음과 같이 라인 간격을 설정하려고한다고 가정합니다.

pTextLayout->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, lineSpacing, baseline);

MSDN에 대한 문서는 다른 라인 간격 방법에 대해 크게 명확하지 않습니다. 기본 메소드는 각 라인의 간격이 중고 글꼴 및 인라인 객체에서 파생되므로 각 라인은 컨텐츠에 따라 필요한 높이입니다. 이 경우 두 매개 변수와 lineSpacing 그리고 baseline, 무시됩니다.

단일 글꼴 (및 글꼴 크기)과 인라인 객체 (또는 텍스트보다 높은 인라인 객체)를 사용하는 텍스트 형식이있는 경우 균일 한 라인 간격을 지정할 수 있습니다. 이것이 바로 DWRITE_LINE_SPACING_METHOD_UNIFORM 입니다. 방금 시도하고 전화했습니다 SetLineSpacing() 이 방법으로 전달 된 인수에 따라 균일 한 라인 간격이 발생합니다.

Windows 10부터 시작하여 세 번째 라인 간격 방법이 있습니다. DWRITE_LINE_SPACING_METHOD_PROPORTIONAL, 이는 글꼴 크기 및 인라인 객체가 지정한 것과 관련하여 라인 간격을 달성하는 데 사용할 수 있습니다. 그러나 이것은 Windows 10에서만 지원됩니다.

내 경험상 가장 오도하는 부분은 SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, x, y) 오류없이 성공하고 나중에 라인 간격 매개 변수를 검색하여 GetLineSpacing() 방법은 제공된 값을 반환합니다 (여전히 아무것도 달성하지 못한다). API는 이와 관련하여 내부적으로 일관성이 있으며, 유용한 것을 달성하지 않더라도 지정된 값을 버리지 않습니다. 또한 전화 할 때 GetLineSpacing() 새로 만들어진 IDWriteTextFormat 또는 IDWriteTextLayout 인스턴스, 값은 0으로 반환됩니다 (라인 간격 메소드가이므로 정확합니다. DWRITE_LINE_SPACING_METHOD_DEFAULT). 유용한 일을하려면 사용중인 글꼴의 기본 라인 간격을 결정해야합니다. 당신은 전화를 통해 이것을 달성 할 수 있습니다 IDWriteFont::GetMetrics() 당신이 사용하고있는 글꼴에서. 기본 라인 간격은의 합입니다 ascent, descent 그리고 lineGap 가치.

Charles Petzold는 이것에 대해 기사에 썼습니다 DirectWrite를 사용한 Pagination.

내가 뭔가를 놓치고 있습니까?

어느 것도 아니다 idwritetextformat ...도 아니다 idwritetextLayout setlineheight 함수가 있습니다 ...

당신은 확인 했습니까? HRESULT 오류 코드가 반환되었습니다 SetLineSpacing()?

힌트 : Visual Studio를 사용하는 경우 유형 eax,hr 디버그 시청 Windows 중 하나에서 통화 직후 가능한 오류 코드를 볼 수 있습니다.

원천

최소 지원 클라이언트 : Windows 7, SP2가있는 Windows Vista 및 Windows Vista 용 플랫폼 업데이트.

위에서 언급 한 Windows 버전을 실행합니까? 변경 사항이 보이지 않는 이유는 위의 상태 아래 버전이 DirectWrite의 SetlinesPacing ()을 지원하지 않기 때문입니다.

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