Header

  1. View current page

    kkamagui의 프로그래밍 작업실

Profile_image?t=1221830958&type=big
온갖 자료가 난무하는 kkamagui의 Springnote~!!!
23

02-1 NDS 에디트 박스(Edit Box)

02-1 NDS 에디트 박스(Edit Box)

원문 : http://kkamagui.springnote.com/pages/1172864

 

0.시작하면서...

 이 문서는 02 NDS 홈브루(Homebrew) - NDS 윈도우 시스템(Windows System)을 이용하여 NDS용 에디트 박스(Edit Box)를 구현하는 문서이다. 윈도우즈(Windows)의 에디트 박스와 비슷한 기능을 제공하며, 커서 이동 및 문자 추가/삭제, 스크롤 기능을 제공한다.

 

1.설계

1.1 자료구조

 에디트 박스의 자료구조는 하나의 String Buffer를 사용했다. 즉 입력받은 String을 출력할 때 파싱(Parsing)하여 개행처리를 수행하는 것이다.

 

1.2 개행 문자(New Line) 처리

 DOS 및 윈도우즈(Windows)에서는 개행을 \r\n의 두 문자로 표현하고 있다. 따라서 개행, 삭제, 커서 이동 시에 이에 대한 처리를 해줘야 한다.

 

1.3 백스페이스(Backspace) 처리

 백스페이스 처리는 생각보다 까다롭다. 라인이 개행되는 이유는 아래의 두가지 경우인데, 이 두가지 경우에 따라서 처리해야하는 방식이 다르기 때문이다.

  • 한 라인이 너무 길어서 개행되는 경우
  • 개행 문자에 의해 개행되는 경우

 

 개행 문자의 의해 개행되는 경우라면 커서의 위치를 윗줄 제일 끝으로 이동하여 문자를 삭제하면 개행문자를 삭제하여 정상적인 처리가 가능하다.

 하지만 라인이 너무 길어서 개행된 경우라면, 개행 문자와 같은 방식으로 처리했을 때 다음줄의 첫 문자가 지워지게 된다. 따라서 개행문자가 아닌 경우는 좌측으로 하나 더 이동해서 처리해야 한다.

 이것을 그림으로 나타내면 아래와 같다.

 

1.4 문자 삽입(Insert) 처리

 문자를 추가할 때도 역시 백스페이스 비슷한 라인 처리에 대한 문제가 생긴다. 커서가 한 라인에서 최대한 출력될 수 있는 위치에 있을 때 추가하게되면 다음 라인의 첫번째 위치에 문자가 추가되게된다. 이때 커서는 개행이되서 다음 라인의 첫부분에 위치하게 되는데, 따라서 커서를 한칸 더 움직여줘야 정상적으로 치리된다.

 이것을 그림으로 나타내면 아래와 같다.

 

 만약 한글이 위와같은 상황에서 추가된다면 어떻게 될까? 당연히 한글은 2자리를 차지하므로 2자리의 여유공간이 있는가 판단해야하며, 없을 경우에 개행한 후 2자리를 오른쪽으로 이동시켜줘야 한다. 즉 개행 후 새로 2개의 문자가 추가된 것과 같이 취급하면 된다.

 

2.구현

 

History

Last edited on 05/12/2008 23:15 by kkamagui

Comments (0)

You must log in to leave a comment. Please sign in.