04-27 19:32
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[C/C++] MFC / Edit Control Cursor 본문

Programming/C&C++

[C/C++] MFC / Edit Control Cursor

cinema4dr12 2014. 8. 19. 15:24

1. 커서를 맨 끝에

SetSel(-1, -1);

2. 커서를 임의의 위치에

SetSel(n, n);



[1. 응용할 멤버 함수]

 에디트 박스의 멤버 함수중에서 커서를 임의의 위치에 놓을 처리를 하는 함수는 SetSel( ... )ReplaceSel( ... ) 입니다.


ex) 에디트 박스의 멤버 변수를 다음과 같이 정의된 상태에서 예를 들어 가면서 설명을 드립니다.


CEdit      m_editMyBox;
CString    m_strMyBox;

 



[2. 커서를 맨 뒤쪽에 놓기]

커서를 맨 뒤쪽에 놓는 방법은 의외로 간단 합니다.



UpdateData( TRUE );
//전체를 선택
m_editMyBox.SetSel( 0, -1 );        
//현재의 데이터로 다시 치환 
m_editMyBox.ReplaceSel( m_strMyBox );
//포커스를 에디트 박스로 설정
m_editMyBox.SetFocus();



이렇게 처리하시면 커서가 데이터의 제일 끝에 놓일 겁니다.



[3. 커서를 임의의 자리에 놓기]

방법은 마찬가지로 SetSel(..)ReplaceSel(...)을 이용하는 것인데, 어떤 형태로 응용할 수 있냐 하면


SetSel( 시작 위치, 끝 위치, ..?? 안살펴 봤음..세번째 인자)


에서 보면, 시작 위치를 처음(0)으로 하고 끝 위치를 커서가 놓이고자 하는 위치로 지정한 후에, 현재의 데이터를 처음부터 커서가 놓이고자 하는 위치까지 다른 버퍼에 복사한 후에, ReplaceSel로 복사 합니다.


소스 코드를 보시면 더 쉬우실 겁니다.


UpdateData( TRUE );
// 커서가 놓일 위치까지 복사할 임시 버퍼(크기는??)
char cDataBuf[100];
// 쓰레기 값을 방지하기 위해.. 초기화
for( int i=0; i<100; i++ ) cDataBuf[i] = NULL;
//--- 6번째에 커서를 위치하고 싶을 경우...
for( i=0; i<6; i++ )
cDataBuf[i] = m_strMyBox[i];



[보충 설명: CString 형의 데이터의 경우]


데이터를 원할때는 버퍼 형태로 사용을 하셔도 됩니다.

무슨 말이냐 하면 제가 CString 형으로 선언된 멤버 변수 m_strMyBox의 데이터를 임시 버퍼에 복사하는 과정에서 m_strMyBox[i]라고 사용을 했는데, m_strMyBox는 에디트 박스의 멤버 변수이거든요.

위와 같은 방법을 복사를 하셔도 되고 다른 방법도 있겠죠.


//--> 원하는 위치만큼 지정
m_editTest.SetSel( 0, 6 );
//--> 바꾸면 되겠죠.. 복사된 내용으로..
m_editTest.ReplaceSel( cDataBuf );
//--> 포커스를 놓으면.. 끝..
m_editTest.SetFocus();


Comments