MFC
[MFC] EDIT Control 사용법
권벡터
2023. 7. 15. 02:10
다이얼로그 적용법
1. 도구 상자에서 'Edit Control' 를 클릭하고 중앙의 다이얼로그에 드래그 앤 드롭 한다.
2. 생성된 'Edit Control' 를 클릭하고 속성 탭의 ID를 변경 (구분되도록 이름 짓자)
필수적으로 ID를 바꿔야 하는 것은 아니다. 다만 규모가 큰 프로그램을 만들 때 혼동될 수 있으니 습관적으로 이름을 바꾸어 주도록 하자.
Edit Control를 생성하고 'resource.h' 파일을 확인하면 아래 네모처럼 새로운 변수가 추가된 것을 볼 수 있다.
3. 'Edit Control' 를 선택하고 마우스 우측 클릭하여 '변수 추가' 메뉴 클릭
4. [범주: 컨트롤, 이름: 마음대로 ] 를 설정하고 '마침' 클릭
5. [범주: 값, 이름: 마음대로 ] 를 설정하고 '마침' 클릭
변수 설정을 완료하고 내가 생성한 프로젝트 이름의 Dlg.h 파일을 확인해 보면 맨 아래쪽에 내가 추가한 변수가 보인다.
마찬가지로 내가 생성한 프로젝트 이름의 Dlg.cpp 파일을 확인해보면 DoDataExchange() 함수 내에 추가된 변수를 확인할 수 있다.
입력 값을 변수에 저장
런타임 환경에서 Edit Control 창에 값을 입력한 후 변수에 저장하는 방법은 여러가지이다.
상황에 맞게 사용하면 될 것 같다.
1. Control 변수에서 입력값 가져오기
CEdit 자료형으로 생성된 변수를 통해서 입력값을 가져오는 방법은 아래와 같다.
// 생성한 MFC 프로젝트Dlg.cpp 파일
// Edit Control1 에서 값을 입력하고 버튼을 누르면
// Edit Control2 에 입력값이 출력되도록 구현
// 버튼 클릭 이벤트 함수
void CMFCApplication1Dlg::OnBnClickedTestBtn()
{
// Edit Control1의 입력값을 'val_input_edit'에 저장한다.
ctrl_input1_edit.GetWindowTextW(val_input1_edit);
// 저장된 'strText'를 EditControl2 에 출력시킨다.
ctrl_input2_edit.SetWindowTextW(val_input1_edit);
}
2. ID 이름을 통해 입력값 가져오기
앞에서 설명한 'resource.h' 파일에 정의된 ID 이름을 통해서 입력값을 가져오는 방법은 아래와 같다.
// 생성한 MFC 프로젝트Dlg.cpp 파일
// Edit Control에 값을 입력하고 버튼을 누르면 입력값이 IDC_INPUT1_EDIT 의 value 변수에 저장되고,
// 저장된 변수를 메세지 박스에 넣어 팝업으로 출력되도록 만들었다.
void CMFCApplication1Dlg::OnBnClickedTestBtn()
{
GetDlgItemText(IDC_INPUT1_EDIT,val_input1_edit);
AfxMessageBox(val_input1_edit);
}
3. 이벤트 처리기를 통해 입력값 가져오기
이 방법은 Edit Control에 값이 변경되면 수시로 변수에 입력값을 바꿔주는 방식이다. '이벤트 처리기' 메뉴의 메세지 유형은 'EN_CHANGE'를 사용했다.
// 생성한 MFC 프로젝트Dlg.cpp 파일
void CMFCApplication1Dlg::OnEnChangeInput1Edit()
{
GetDlgItemText(IDC_INPUT1_EDIT, val_input1_edit);
}
다이얼로그에 값을 출력
// 생성한 MFC 프로젝트Dlg.cpp 파일
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 시스템 메뉴 항목 관련 코드는 생략했다.
// 방법 1
ctrl_input1_edit.SetWindowTestW(_T("아무말 대잔치"));
// 방법 2
CString strText;
strText = _T("주저리주저리");
ctrl_input1_edit.SetWindowTestW(strText);
//방법 3
SetDlgItemTextW(IDC_INPUT1_EDIT, _T("주저리"));
return TRUE;
}