본문 바로가기
C & C++/MFC 컨트롤

[Edit] CEdit Controller 의 사용법

by izen8 2011. 1. 12.
반응형

* 임무 *

다이얼로그 또는 일반 어플리케이션에서 에디트 박스를 많이 사용한다. 어떻게 에디트 박스를 효율적으로 다룰 것인가?

* 사용법 *

1. 먼저 에디트 박스를 지칭할 수 있는 포인터 변수를 생성한다.

2. 에디트 박스의 포인터를 받아온다.

3. CEdit의 멤버 함수를 이용하여 원하는 조작을 할 수 있다.

* 코딩 예 *

CEdit *pEdit; // 포인터 변수

// 여기서는 IDC_EDIT1이라는 임의 ID를 사용한다. 실제로는 리소스 에디터에서 만들고 이름을 바꿀 수 있다.

pEdit = (CEdit *)GetDlgItem(IDC_EDIT1); // 해당 ID를 가진 에디트 박스의 포인터를 가져온다. (CEdit *)로 캐스팅 한다.

// 해당 에디트 박스의 컨트롤을 가져 올 수 없다면 NULL이다.

if (pEdit)

{

   // 이제 해당 에디트 박스에 대해 조작을 행할 수 있다.

   pEdit->SetWindowText( "하하하" ); // 다음의 텍스트를 창에 넣는다.

}

* 멤버함수를 이용 가능한 조작 *

CString String;

1. 에디트 박스에 문자열 넣기

    pEdit->SetWindowText( String ); // String의 문자열을 에디트 박스에 넣는다.

2. 에디트 박스에서 문자열 가져오기

   pEdit->GetWindowString( String );

3. 내용 전부 지우기

   pEdit->SetSel(0, -1); // 처음부터 끝까지 선택한다. 즉 모든 문자 선택
   pEdit->Clear();  // 지운다.

4. 읽기 전용 설정/해제

   pEdit->SetReadOnly(TRUE);   // 읽기전용으로 설정

   pEdit->SetReadOnly(FALSE); // 읽기전용에서 해제

5. 에디트 박스가 멀티라인인 경우 입력내용이 총 몇줄인지?

   INT Lines = pEdit->GetLineCount();  // 변수 Lines에 몇줄인지 받아옴

6. 원하는 줄의 첫번째 글자의 인덱스 값을 가져온다.

   INT Index = pEdit->LineIndex(1);            // 두번째 줄의 첫번째 글자의 인덱스 위치를 가져옴

   //   0~n-1의 인덱스 방식이다. 따라서 첫번째 줄은 0, 두번째 줄은 1이 된다.

7. 각 줄의 글자수를 알아낸다.
INT NumLetters = pEdit->LineLength(1);  // 두번째 줄이 몇개의 글자로 이루어 졌는지 알아냄

8. 최대 에디트 가능 용량을 설정
pEdit->SetLimitText(0x10000); // 최대 문자수를 65536로 설정 (64KB)

* 추가된 기능 *

9. 이미 문자열이 지정된 에디트 박스의 맨앞에 문자를 추가

 pEdit->SetSel(0, 0);                      // 맨앞을 선택한 것임.
 pEdit->ReplaceSel("원하는 문자");  // 추가하고 싶은 문자열

 10. 해당 컨트롤러 수정 못하게 하기
  GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
  GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);

  11. 해당 컨트롤러 안보이게 하기
  //GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
  //GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);


12. Edit Box 의 내용 다 지우기
컨트롤 변수.SetSel(0, -1, TRUE);    // 처음부터 끝까지
컨트롤 변수.Clear();                      // 다 지우시오
* 결론 *

CEdit는 MFC 기본 클래스 중의 하나이다. 많이 사용되므로 특성을 철저히 이해하는 것이 좋다.

SetSel()함수로 블록을 지정한뒤 내용을 바꾸거나 삭제, 복사, 이동 할 수 있다.

경험이 쌓이면 www.msdn.com에서 MFC의 함수 매뉴얼을 읽어보는 것이 도움이 된다.

부모 클래스인 CWnd의 멤버함수와 함께 사용하면 더 많은 기능, 원하는 기능을 손쉽게 사용 할 수 있다.

반응형

댓글