2015-01-30 8 views
0

모든 종류의 기록 된 데이터를 저장하는 문자열이 있습니다. 이 데이터는 콘솔을 통해 액세스 할 수 있어야합니다. 물론 콘솔의 높이는 제한되어 있습니다. 따라서 전체 텍스트를 렌더링 할 필요는 없지만 보이는 텍스트 만 렌더링 할 수 있습니다. 이를 위해 사용자가 스크롤 한 텍스트의 맨 아래 (가장 최근) 끝에서 몇 픽셀을 저장하는지 변수가 있습니다. 이제는 내 텍스트에 어떤 부분이 내 콘솔에 들어 있는지 알아내는 방법과 DirectWrite에 렌더링 만 지시하는 방법이 필요하다고 생각합니다. 지금까지 할 것을DirectWrite로 스크롤 텍스트 실현

: 지금 내가 스크롤 기능이없는 전체 텍스트 (지금은 단지 작은 테스트 텍스트)을 그릴 CreateTextLayout(...)DrawTextLayout(...)을 사용하고 있습니다.

CreateTextLayout(...)은 이미 인수 maxWidthmaxHeight을 사용합니다. 그래서 이것은 콘솔에 맞는 것을 렌더링하는 문제를 처리합니다.

나는 또한 DWRITE_PARAGRAPH_ALIGNMENT_FAR을 사용하여 최신 텍스트 줄을 볼 수있게했습니다. 그러나 추가로 스크롤을 추가하려면 어떻게해야합니까? (추가 픽셀 형태와 줄이 아닌 것이 가장 좋으므로 시간을 조절하여 점진적으로 부드러운 스크롤을 구현할 수 있습니다)? 짧은

  1. 에서

    은 처리 CreateTextLayout(...) 하는가 "렌더링 전용 - - - 보이는 어떤 부분이"나를 위해?

  2. 스크롤하는 부분은 어떻게 포함합니까?

편집 : 제목이 변경되었습니다. 실제로 질문을 잘 정리하지 않았기 때문에 제목이 변경되었습니다.

답변

0

TextLayout은 텍스트의 내부 표현입니다. 상상해보십시오. 각 Charakter를 나타내는 일련의 그림 (Glyphs)을 상상해보십시오 (정확하지는 않지만 설명하기에 충분합니다). 마지막으로 텍스트를 렌더링하면 렌더링 대상은 화면에 표시된 내용 만 칠하므로 HDC와 겹치는 부분이 잘립니다. 이것이 작동하는 방법입니다.

DrawTextLayout()을 호출하면 함수에 그리기의 시작점 (원점)이 부여됩니다. 원점의 y 위치에서 Scrolling-y-Value를 Substract ... 완료했습니다.

당신이 글리프에 대한 자세한 내용을 원한다면

: -Catch22.com 위대한하지만 미완성 Neatpad 자습서를 사용하여 유니 스크라이브 (Uniscribe) 가지고 (공포의 API를하지만의 DirectWrite가 내부적으로 어떻게 작동하는지에 대한 아이디어 제공)

-MSDN도있다을 DirectWrite를 통해 Glyph에 직접 작업하는 방법 및 직접 렌더러를 작성하는 방법에 대한 자습서 : https://msdn.microsoft.com/en-us/library/windows/desktop/dd941787%28v=vs.85%29.aspx

희망이 있습니다.