[질문] 한글로된 문장에서 중간에 문장을 두줄로 나누기

OpenGL 한글 (입)출력 라이브러리 "glan"에 대한 포럼입니다.

Moderator: 류광

로그인 안한 zetarus

[질문] 한글로된 문장에서 중간에 문장을 두줄로 나누기

Post by 로그인 안한 zetarus »

가령 " 가나다라마바사아자차카타파하"
란 문장이 있습니다.

두줄로 나누어 찍으려고 하는데요

자른 후의 문장 글자가 깨지지 않게

" 가나다라마바사"
"아자차카타파하"
이렇게 되게할려면요
어떤걸 참조해서 자르면 될까요?

무턱대고 잘라보니 두번째 문장의 경우
한바이트를 잘못 건드리면 바로 이후 글자가 깨지네요.
한글에 대한 이해가 부족한 관계로...

아시는분께서 답변좀.... 부탁드립니다.
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

Win32 API에 IsDBCSLeadByte라는 함수가 있는데 한 번 살펴보시구요. VC++ 런타임에는 isleadbyte라는 함수가 있구요.

그냥 첫 번째 문자부터 훑어 나가면서 128 이상 바이트들의 짝, 홀을 세는 방법도 있습니다.. 잘라야 할 문자가 홀수번째이면 그 다음 문자에서 자르면 되죠... (2 바이트 완성형의 경우입니다. 조합형은 두 번째 바이트가 127 이하인 경우도 있습니다. )
sparrowhawk

문자열 자르기

Post by sparrowhawk »

아예 문자열 전체를 유니코드나 wchar 로 바꿔 버려서 자르는 것도 나쁘지 않을 듯 합니다.
그럼 한 문자가 2byte씩 차지할 테니...
oranke
Posts: 244
Joined: 2002-05-09 09:00

GetTextExtentExPoint() API를 쓰시면 되요~~ ^^;

Post by oranke »

문자열이 찍힐 DC값과 자를 길이를 던져주면 문자열에서 끊어야 할 부분을
알려주는 함수 입죠. 물론 이 DC에는 원하는 폰트가 셋팅되어 있어야 합니다.

이렇게 얻어낸 다음에 잘라진 위치에 해당하는 캐릭터를 IsDBCSLeadByte로
검사해서 2바이트 문자열의 앞부분이라면 한 칸 더 앞에서 잘라주면 되겠죠~ ^^;;

제 경우는 그냥 유니코드로 변환해서 끝에 'W'가 붙은 GetTextExtentExPointW()
API를 사용합니다. 훨씬 속 편하더군요~~
Post Reply