* 임무 *
다이얼로그 또는 일반 어플리케이션에서 에디트 박스를 많이 사용한다. 어떻게 에디트 박스를 효율적으로 다룰 것인가?
* 사용법 *
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의 멤버함수와 함께 사용하면 더 많은 기능, 원하는 기능을 손쉽게 사용 할 수 있다.
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
[ToolBar] MFC 트루컬러 툴바 만들기 (0) | 2011.01.12 |
---|---|
[Event] 오른쪽 마우스버튼으로 여는 컨텍스트 메뉴 (0) | 2011.01.12 |
[Etc] 링크(Link) 컨트롤 (0) | 2011.01.12 |
[MFC 연습] LogonDemo 연습 (0) | 2011.01.12 |
[MFC 연습] 마우스 드레그 & 드롭 (0) | 2011.01.11 |
댓글