2009-11-03 6 views
4

Direct2D/DirectWrite에서 텍스트를 렌더링하지만 TextFormat 또는 TextLayout에서 SetLineSpacing()을 호출해도 아무런 효과가 없습니다. 아무도 이유를 아나요?SetLineSpacing()이 DirectWrite에서 작동하지 않습니다 - 이유가 무엇입니까?

+0

이것은 버그 일 수 있습니다 : http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?Feedback=507456 – Kredns

+1

나는 버그를 게시했으나, 여기에 물어볼 때 현명하다고 생각했습니다. 뭔가 잘못하고있어. –

+1

코드를 보여주십시오. – Goz

답변

5

저는 이것이 99 %의 버그인지 확인했습니다. 최근에 Direct2D로 조금 놀아 봤지만 TextLayout에 SetLineSpacing()의 문제가 있습니다. 설명하는 것과 동일하다고 생각합니다.이 경우에는 내가 당신이 아니라는 것을 확인할 수 있습니다. MS Connect에서 버그 보고서를 다시 열면 닫혔습니다.

+0

정말 2009 년에 작동하지 않았지만 적어도 지금은 SetLineSpacing()을 호출하면 예상대로 작동하는지 모르겠습니다. 문제는'DWRITE_LINE_SPACING_METHOD_DEFAULT'를 지정할 때,이 문맥에서 의미가 없기 때문에 두 개의 float 값은 무시된다는 것입니다. 기본 줄 간격은 "사용 된 글꼴 및 인라인 개체에서 줄 간격을 가져 오는"것을 의미합니다. 자세한 내용은 내 대답을 참조하십시오. – Pepor

0

당신이 SetLineSpacing()에 의해 반환 된 HRESULT 오류 코드를 확인 했 ... SetLineHeight 기능이?

힌트 : Visual Studio를 사용하는 경우 디버그 조사 식 창 중 하나에 eax,hr을 입력하면 통화 직후 가능한 오류 코드를 확인할 수 있습니다.

+0

예, S_OK입니다. –

-2

Source

최소 지원되는 클라이언트 : 윈도우 7, 윈도우 비스타 SP2 및 플랫폼 업데이트와 윈도우 비스타.

위에서 언급 한 Windows 버전 중 하나를 실행합니까? 변경 사항이 표시되지 않는 이유는 위에서 아래에있는 버전이 DirectWrite의 SetLineSpacing()을 지원하지 않기 때문입니다.

+0

내가 실행하고 있다는 사실은 내가 실제로 지원되는 운영 체제를 사용하고 있음을 암시합니다.이 경우 2008R2입니다. –

2

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

그러나, " CreateTextLayout"후에 lineSpacing을 설정하면 SetLineSpacing이 작동하지 않는다는 것을 알았습니다.

그렇지 않으면 CreateTextLayout 전에 LineSpacing을 설정하면 이 작동합니다.

아마도이 soluton을 시도해 볼 수 있습니다.

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

감사합니다.

1

불행히도 당신이하려는 일을 보여주는 코드를 제공하지 않습니다. 나는이 같은 줄 간격을 설정하기 위해 노력하고 있으리라 믿고있어 :

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

MSDN의 문서는 다른 줄 간격 방법에 대한 정말 명확하지 않다. 기본 방법은 사용 된 글꼴 및 인라인 객체 (있는 경우)에서 각 행의 간격을 가져 오므로 각 행은 해당 내용에 따라 필요한 높이입니다. 이 경우 두 매개 변수 lineSpacingbaseline은 무시됩니다.

단일 글꼴 (및 글꼴 크기)을 사용하고 인라인 개체 (텍스트보다 높지 않은 인라인 개체)가없는 텍스트 형식 인 경우 균일 한 줄 간격을 지정할 수 있습니다. 이것은 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는 내부적으로 일관성이 있으므로 아무 것도 유용하지 않더라도 지정된 값을 버리지 않습니다. 또한 새로 만든 IDWriteTextFormat 또는 IDWriteTextLayout 인스턴스에서 GetLineSpacing()을 호출하면 값이 0으로 반환됩니다 (줄 간격 방법이 DWRITE_LINE_SPACING_METHOD_DEFAULT이므로 올바른 값입니다). 유용하게 사용할 수 있으려면 사용중인 글꼴의 기본 줄 간격을 결정해야합니다. 사용중인 글꼴에 IDWriteFont::GetMetrics()을 호출하면됩니다. 기본 줄 간격은 ascent, descentlineGap 값의 합계입니다.

Charles Petzold가 약 Pagination With DirectWrite에 대한 기사에 대해 썼습니다.