2011-02-23 10 views
4

사용에 비해 RichEdit 컨트롤에 제시된 문자 간격의 차이는이 사진이 내 처지를 설명 크기가 있지만 ExtTextOut을 사용할 때와 비교했을 때 RichEdit 컨트롤에 표시 될 때 공간이 다릅니다.표시 : <img src="https://i.stack.imgur.com/J6YSv.png" alt="Image1"></p> <p>캐릭터의 모든</p> <p>가 동일하게 나타납니다 ExtTextOut

감싸기 위치를 유지하기 위해 RichEdit 컨트롤 (이상적)과 같은 문자를 표시하고 싶습니다.

사람은 말해 줄 수 :

A) 더 정확한 표현은 무엇입니까?

b) RichEdit 컨트롤이 아시아 문자 사이에 간격이없는 텍스트를 표시하는 이유는 무엇입니까? c) 이러한 문자를 그리면 ExtTextOut RichEdit 컨트롤의 동작을 재현 할 수있는 방법이 있습니까?

d) 아시아 버전의 Windows에서 작업하는 경우에도 이와 다를 수 있습니까?

아마도 나는 낙관적 인 생각이 들지만 누군가 제안 할 힌트가 있다면, 나는 매우 흥미가있을 것입니다. 여기

내 텍스트입니다 : 경우

은 도움이 우리의 유니 코드 구현을 테스트하기 위해 단지이다, 아시아 독자에게

快的棕色狐狸跳在懶惰狗1 2 3 4 5 6 7 8 9 0 

사과와 내가 알지도 못하는 어떤 언어 문자가 무엇이든간에 의미가 있는지 여부는 물론입니다.

이러한 문자를 RichEdit 컨트롤에 붙여서 효과를 보려면 (예 : 워드 패드)를 사용하여 글꼴을 스 와이프하고 글꼴을 'Arial'로 설정해야 할 수도 있습니다. 내가 얻을

서식있는 텍스트이다 : 내 첫번째 생각이었다 문자 '피치'에 대한 값을 포함하는 표시되지 않습니다

 
{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Arial;}}{\colortbl ;\red0\green0\blue0;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\fs22\u24555?\u30340?\u26837?\u33394?\u29392?\u29432?\u36339?\u22312?\u25078?\u24816?\u29399?1 2 3 4 5 6 7 8 9 0\par\pard\'a3 $$ \'80\'80\cf1\lang2057\fs16\par} 

.

+4

a) ExtTextOut 디스플레이는 모양이 좋아야합니다. (게으른 개를 뛰어 넘은 빠른 갈색 여우의 중국인입니다.) – awm

+0

고마워요. @awm - 적어도 문제가 어디에 있는지 분명히하고 있습니다. –

답변

3

나는 답을 모른다, 그러나 의심 할 몇 가지가있다 : 풍부한 편집 컨트롤의 여러 버전이 있습니다

  • 은. 아마도 모든 최신 활자체가 개선되지 않은 오래된 것을 사용하고있을 것입니다.
  • rich editcontrol의 동작에 영향을주는 많은 스타일과 플래그가 있으므로 어떤 것이 설정되고 무엇을하는지 탐색 할 수 있습니다. 예를 들어, EM_GETEDITSTYLE을보십시오.
  • 많은 아시아 글꼴은 Windows에서 두 가지 버전이 있습니다. 하나는 가로 레이아웃에 최적화되어 있고 다른 하나는 세로 레이아웃에 최적화되어 있습니다.후자는 대개 같은 이름이지만, 앞에 @이 붙습니다. 아마도 당신은 부자 편집 컨트롤에서 잘못된 것을 사용하고있을 것입니다.

업데이트 : Wordpad를 어지럽게 사용하여 복잡한 편집 컨트롤에서 복잡한 텍스트 문제를 재현 할 수있었습니다.

  1. Windows 7의 워드 패드에서 새 문서를여십시오. 선택된 글꼴은 Calibri입니다.
  2. 샘플 텍스트를 문서에 붙여 넣습니다.
  3. 텍스트가 올바르지 만 워드 패드가 글꼴을 SimSun으로 변경했습니다.
  4. 텍스트를 선택하고 글꼴을 다시 Calibri 또는 Arial로 변경하십시오.

텍스트가 너무 복잡하여 예제와 매우 유사합니다. 따라서 근본적인 문제는 글꼴 연결 및 대체와 관련이있는 것으로 보입니다. ExtTextOut은 스크립트에 적합한 글꼴을 자동으로 선택합니다. 스크립트의 올바른 글꼴을 식별하고 해당 글꼴을 서식있는 편집 컨트롤에 설정하는 방법을 알아내는 것이 중요합니다.

+0

감사합니다. @Adrian - 조사 할 항목을 알려줍니다. RichEdit : RichEdit2 및 RichEdit5 (Windows 7에서 워드 패드에서 사용)의 두 가지 버전을 시도했습니다. 둘 다 같은 결과를냅니다. –

+0

죄송합니다. '편집'을 위해 '입력'을 누르는 데 문제가 있습니다. 그 주석의 나머지 부분은 다음과 같습니다. 나는 앞에 붙은 '@'문자를 발견하고 그 의미가 궁금했습니다. RichEdit (워드 패드에서 테스트 한 바와 같이)는 상당히 다른 글꼴로 문자 간격을 제거하지만 레이아웃은 선택한 글꼴에 따라 조금씩 다를 수 있습니다. –

0

이것은 문제의 일부로 만 도움이되지만 RichEdit과 똑같이 보이는 DC에 텍스트를 그리는 방법이 있습니다. 창없는 RichEdit 컨트롤이라고하는 것입니다. 정확하게 사용하기 쉽지는 않습니다. 몇 년 전에 CodeProject article을 썼습니다. 이 방법을 사용하여 텍스트 블록을 스크롤 할 수있는 문제를 해결했습니다. 각 페이지는 클릭하여 편집 할 수 있습니다. 일반적인 그리기는 창없는 RichEdit에서 수행하고, 편집은 "실제"RichEdit 컨트롤을 표시하여 편집합니다. 그것의 꼭대기.

불행히도 두 경우 모두 문자 간격이 너무 작을 수 있지만 두 경우 모두 동일하게 보이는 텍스트를 얻을 수 있습니다.

한 가지 더 생각해보십시오. 설치중인 Microsoft Office에 의존 할 수 있다면 나중에 출시 될 RichEdit 버전을 사용해 볼 수도 있습니다. Murray Sargent's blog에 대한 자세한 내용은 물론 글꼴 바인딩에 대한 몇 가지 흥미로운 기사도 도움이 될 수 있습니다.

+0

Thanks @DavidK, 귀하의 의견은 매우 흥미 롭습니다. 귀하의 접근 방식은 몇 년 전에했던 것과 유사하다고 생각합니다. 당시 우리는 Enhanced Metafile을 구축하고 RichEdit 컨트롤을 직류로 직접 끌어 들였습니다. 우리가 직면 한 문제는 HP DesignJet 프린터가 글꼴이 유효하지 않다고 말하는 오류를주는 향상된 메타 파일 (내가 의심되는 ModifyWorldTransform 때문)을 렌더링하지 않는다는 것입니다. 이것이 우리 자신의 RTF 파서를 작성하는 방법입니다. EMF에 글을 쓰면 RichEdit이 어쨌든 무엇을하고 있는지 분석 할 수있는 방법이 될 것입니다. –

+0

Windows 7에서 워드 패드를 사용하여 최신 버전의 RichEdit을 사용해 보았습니다. 정확히 같은 문제가 있습니다. 필자가 읽은 바에 따르면, RichEdit5.0 (4.1 버전이라고 알려져 있음)은 XP SR3 이상의 모든 운영 체제에 포함되어 있지만 도움이되지 않았기 때문에이 점을별로 추구하지 않았습니다. 이제 RichEdit이 단순히 동일한 글꼴의 다른 변형을 사용하고 있을지도 모른다고 생각합니다. –

1

ExtTextOut을 사용하면 레코드 사이의 논리적 간격을 지정할 수 있습니다. 인접한 문자 셀의 기점 사이의 거리를 나타내는 값 배열에 대한 const 포인터 인 parameter lpDx을가집니다. Microsoft API 문서에서는 설정하지 않으면 자체 기본 간격을 설정합니다. ExtTextOut이 정상적으로 작동하는 이유가 여기에 있습니다.

특히 EMF에서 EMR_EXTTEXTOUTW 레코드를 구성하면이 DX 배열로 EMR_TEXT 구조체가 채워집니다. 사용자 의견 중 하나를보고 RichEdit이 레코드에 포함 된 정보로 EMF를 삽입 할 수있게됩니다. 글꼴 바인딩을 설정하지 않았다면 RTF 레코드는 사용할 글꼴을 찾아 내기 위해 일부 일치 작업을 수행합니다. RichEdit 컨트롤의 측면에서

following article 유용 할 수 있습니다 :

사용 글꼴에 바인딩 리치 편집 컨트롤 문자 집합이 할당 된 후

이, 리치 편집이 주위에 텍스트를 스캔합니다 문자 집합에 이 사용 된 가장 가까운 글꼴을 찾으려면 앞뒤로 삽입 점을 삽입하십시오. 문자 집합에 글꼴이 없으면 Rich Edit은 문자 집합에 대해 클라이언트가 선택한 글꼴을 사용합니다.클라이언트가 문자 이 설정된 글꼴을 지정하지 않은 경우 서식있는 편집은 해당 문자 집합의 기본 글꼴을 사용합니다. 클라이언트가 다른 글꼴을 원하면 클라이언트는 항상 글꼴을 변경할 수 있지만 이 방법이 대부분 효과적입니다. 현재 기본 글꼴 선택 사항은 다음 표를 기반으로합니다. 기본 글꼴은 프로세스별로 설정되며 UI 사용과 비 UI 사용을위한 별도의 목록이 있습니다.

문자 집합을 설정하지 않은 경우 ANSI_CHARSET으로 되돌아갑니다. 그러나 가장 확실하게 a lot more complicated than that입니다. Murray Sargent (Microsoft 프로그래머)의 블로그 기사에서 볼 수 있습니다.

+0

게시 해 주셔서 감사합니다. 매우 유익하고 유익한 답변처럼 보입니다. –

+0

probs 없음 - 내가 LibreOffice를 코딩하고 있기 때문에 이것을 발견했습니다 - 다른 사람들에게 유용한 정보라고 생각했습니다 :-) –