Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 (239-246쪽)
실습 목적 및 장비 실습 목적 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0) 대화 상자의 설계 컨트롤의 추가 대화 상자 클래스 생성 컨트롤에 Value형 변수 연결 컨트롤에 Control형 변수 연결 기본 컨트롤 및 콤보 박스 사용 방법 숙지 Modality 숙지 Modal dialog 응용 Modeless dialog 응용 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)
1. 프로파일 입력 예제 프로그램 개요 Single Document 애플리케이션 본인 인적 사항 및 배우자 인적 사항 입력을 위한 modal 대화 상자 이용 배우자 인적 사항 입력은 기혼자에게만 허용 (Control형 변수 이용) 입력 결과를 메시지 박스로 출력 실행 파일(http://cs.sookmyung.ac.kr/class/06395/Lab/Profile.exe)
단계 1: 메뉴 추가 메뉴 리소스 편집 (메뉴와 메뉴 항목 추가) 2. 메뉴 항목 속성 설정
단계 2: 메뉴 항목 처리 함수 작성 메뉴 항목에 대해 Class Wizard 호출 2. 메뉴 소속 클래스 지정 (View 또는 MainFrame) 3. COMMAND 메시지 처리 함수로 등록 void CProfileView::OnProfile() { // TODO: …. }
단계 3: 대화 상자 리소스 편집 대화 상자의 추가 ResourceView에서 Dialog 항목에 대한 Pop-up; 여기서 Insert Dialog 선택, 또는 상단 Insert 메뉴 안의 Insert Resource 선택 2. 컨트롤들을 추가하여 대화 상자 설계 (타이틀 바의 “신상 입력”은 대화 상자 Caption 속성에 설정함) 3. Layout 메뉴를 이용하여 크기, 위치 등을 조정 CheckBox Edit Group Button Static
단계 4: 다이얼로그 클래스 생성 단계 3의 대화 상자를 나타내는 클래스를 CDialog의 파생 클래스로 생성 Insert 메뉴의 New Class, 또는 대화 상자에 대해 Class Wizard 호출
단계 5: 컨트롤들에 Value형 멤버 변수 연결 Class Wizard Member Variables 탭 Add Variables, 또는 2. 각 컨트롤에 대해 Ctrl + 더블클릭
컨트롤들에 Value형 멤버 변수 연결 범주 컨트롤 변수 유형 변수 이름 본인 정보 이름 CString m_strName1 나이 int m_nAge1 기혼 BOOL m_bMarried 배우자 정보 m_strName2 m_nAge2
단계 6: 대화 상자 입력 내용 처리 #include "ProfileDlg.h" void CProfileView::OnProfile() { CProfileDlg dlg; if (dlg.DoModal() == IDOK) CString str; if (dlg.m_bMarried) // 기혼의 경우 str.Format("본인이름: %s, 나이: %d, \n배우자이름: %s, 나이: %d", dlg.m_strName1, dlg.m_nAge1, dlg.m_strName2, dlg.m_nAge2); } else // 미혼의 경우 str.Format("본인이름: %s, 나이: %d", dlg.m_strName1, dlg.m_nAge1); MessageBox(str, “Profile”);
단계 7: 컨트롤에 Control형 멤버 변수 연결 배우자 정보 입력용 Edit 컨트롤들에 대해 비활성화 제어를 위한 변수 2. Value형의 경우와 동일한 방법 범주 컨트롤 변수 유형 변수 이름 배우자 정보 이름 CEdit m_ctrName 나이 m_ctrAge
단계 8: 대화 상자 초기화에서 컨트롤 비활성화 BOOL CProfileDlg::OnInitDialog() { CDialog::OnInitDialog(); m_ctrlName.EnableWindow(FALSE); m_ctrlAge.EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control }
단계 9: Check Box에서 컨트롤 비활성화 제어 Check Box에 대한 BN_CLICKED 처리 함수 OnCheck1() 생성 Check Box에 연계된 변수 m_bMarried에 컨트롤의 현재 상태 반영을 위해 UpdateData(TRUE) 호출 m_bMarried의 현재 값에 따라 활성화 여부 지정 void CProfileDlg::OnCheck1() { UpdateData(TRUE); m_ctrlName.EnableWindow(m_bMarried); m_ctrlAge.EnableWindow(m_bMarried); }
2. 프로파일 입력 예제 – 콤보 박스 프로그램 개요 앞의 예제에 콤보 박스 추가 메시지 박스의 타이틀 변경 실행 파일(http://cs.sookmyung.ac.kr/class/06395/Lab/Profile2.exe)
콤보 박스의 사용 콤보 박스 컨트롤을 대화 상자에 추가 2. 속성의 Data 탭에서 데이터 입력 (각 항목 끝에 right arrow, CTRL+ENTER) 3. CString 유형의 변수 m_strJob을 연결 4. Format에서 변수 m_strJob 값 반영
3. Modeless 다이얼로그 박스 예제 앞의 예제와 동일하게, 그러나 신상 정보의 입력을 위한 대화 상자를 modeless로 Dialog 클래스 안에서 입력 결과 처리