2010-12-10 5 views
0

멋지게 형식화 된 단락에 JSON 데이터를 표시하는 응용 프로그램을 만드는 중입니다. JSON 데이터에는 제목, 부제, 본문 등이 있습니다. 본문에는 링크 (파란색과 밑줄로 표시해야 함)가있을 수 있습니다. 여기가 문제가되는 부분입니다.Graphics.DrawString 인라인 글꼴 변경 C#

이 프로그램은 .NET Compact Framework를 기반으로하며 JSON 개체 (및 사각형, 글꼴, 색)와 함께 Graphics 개체 만 제공됩니다. 어쨌든 모든 링크가 다른 색상/글꼴로 변경된 텍스트 문자열을 멋지게 그릴 수 있습니까?

내 생각은 단어 하나 하나를 그려서 단어가 올 때 바로 글꼴을 변경하는 것이 었습니다. 이것은 매우 비효율적 인 것처럼 들립니다. 더 좋은 방법이 있습니까?

감사합니다 :)

아, 추신 DrawString 메서드에서 사각형의 적절한 높이를 쉽게 결정할 수있는 방법이 있으면 텍스트가 잘리지 않으므로 매우 유용합니다!

업데이트 : 내 추기경을 알아 냈습니다. 질문 : http://www.mobilepractices.com/2007/12/multi-line-graphicsmeasurestring.html

+0

Compact Framework에서이 WinForms 응용 프로그램입니까? 그렇지 않다면 앱에 대해 더 자세히 알려주시겠습니까? – Bryan

+0

예, Compact Framework의 WinForms 앱입니다. 그것은 실제로 새로운 Facebook 클라이언트입니다. 저는 2 달 전부터 XDA-Developers에서 개발했습니다. http://forum.xda-developers.com/showthread.php?t=630992 –

답변

0

좋아, 내가 뭘했는지는 특수 "Word"개체가있는 사용자 지정 그리기 방법을 추가하는 것입니다. Word 개체는 문자열, 색상 및 글꼴 포인터를 포함합니다. 나는 워드 개체의 사전에 텍스트를 구문 분석하고 모든 개체를 통해 루프와 (공백으로 deliminated 및 "-") word에서 단어를 mesure합니다 다음 sudo는 코드

int maxWidth = Width 
int curX = 0 
int curY = 0 

foreach word in words 
    if curX > 0 
     word = DrawWordUntilWidth(out curX, out curY, word, maxWidth) 

    if word != null 
     DrawWord(out curX, out curY, word, maxWidth) 

DrawWordUntilWidth와 텍스트를 그린 curX > maxWidth까지 그 단어에 맞게 단어를 자르고, curX를 0으로 설정하고, curY += maxWordHeight을 해당 행에 사용 된 글꼴의 최대 높이로 설정하십시오. word의 모든 단어가 모두 사용되면 null이 반환되고, 그렇지 않으면 trunc'ed 단어가 반환됩니다.

DrawWord은 매우 유사하지만 curX는 항상 = 0이므로 전체 문자열을 그릴 수 있으므로 그에 따라 curX 및 curY를 설정할 수 있습니다.

스터드가 거의 없기 때문에 꽤 잘 작동하며 꽤 부드럽게 렌더링됩니다. 누구든지 더 나은 해결책이 있다면 알려 주시기 바랍니다!