대화상자 기반의 프로그램
CDialogEx 클래스
대화상자
- 사용자와 윈도우간의 인터페이스
CDialogEx 클래스
- 대화상자는 CDialogEx 클래스로 정의
- 모든 윈도우 메시지 처리 가능
- 배경색과 배경그림을 바꾸는 기능 추가
대화상자 기반의 프로그램
- 애플리케이션 클래스와 다이얼로그 클래스로 구성
클래스 | 기저 클래스 | 설명 |
CP1App | CWinApp | 프로젝트 전체를 관리하는 클래스 |
CP1Dlg | CDialogEx | 대화상자의 기능을 구현하는 실제적인 클래스 |
CAboutDlg | CDialogEx | 도움말 정보 클래스 |
컨트롤과 멤버변수의 연결
- 컨트롤의 핸들을 얻기 위해 컨트롤의 포인터를 받을 객체 포인터 변수 선언
- GetDlgItem() 함수를 이용하여 컨트롤의 핸들을 얻어옴
- 클래스의 멤버함수를 이용하여 컨트롤을 다룸
ex)
CListBox *pList;
pList = (CListBox *)GetDlgItem(IDC_LIST1);
pList->AddString(_T("데이터"));
- DoDataExchange() 함수
- 대화상자의 자원을 연결하는 기능을 하는 함수
- 이 함수 안에는 DDX_Value 함수나 DDX_Control 함수를 이용하여 자원과 연결
- DDX_Control 형태로 연결되었을 경우는 변수가 클래스로부터 상속 받았으므로 클래스의 멤버 함수를 마음대로 사용할 수 있음
- UpdateData() 함수
- DDX_Value 형태로 연결되었을 경우는 UpdateData() 함수를 사용하여 자원을 Update해야 함
ㄴ 컨트롤에 있는 데이터를 변수에 가져오고 싶다면 UpdateData(TRUE)를 사용
ㄴ 변수에 특정 값을 주고 그 값을 컨트롤에 보내고 싶다면 UpdateData(FALSE)를 사용
1) DDX_Value형 함수
- Radio Button (CButton)
- CheckBox Button (CButton)
- Edit Control (CEdit)
- 문자열 입력 처리 : CString m_strName;
DDX_Text(pDx, IDC_EDIT_NAME, m_strName); - UpdateData() 함수를 이용해서 컨트롤 ↔ 변수간 데이터 교환
- UpdateData(true) : 화면 → 변수로 데이터 저장하기
- UpdateData(false) : 변수 → 화면으로 데이터 내보내기
- 문자열 입력 처리 : CString m_strName;
추가 : 해당 컨트롤 제어 (포커스 설정, 비활성화 ↔ 활성화)
해당 컨트롤형의 클래스를 이용해야 함.
CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT_SOURCE);
pEdit→SetFocus();
2) DDX_Control형 함수
- Combo Box (CComboBox) : CComboBox m_cmbVolume;
DDX_Control(pDx, IDC_COMBO_VOLUME, m_cmVolume); - List Box (CListBox)
- UpdateData() 함수 사용X
- 해당 컨트롤 클래스를 사용
방법1
CListBox m_lstResult;
DDX_Control(pDx, IDC_LIST_RESULT, m_lstResult);
ex) m_lstResult.AddString(T("아이템"));
방법2
CListBox * pList = (CListBox *)GetDlgItem(IDC_LIST_RESULT);
pEdit→AddString(_T("아이템"));
1-2) 콤보 박스 (CComboBox)
CComboBox m_cmVolume;
DDX_Control(pDX, IDC_COMBO_VOLUME, m_cmbVolume);
CListBox 클래스 멤버함수
- DDX_Control(pDX, IDC_LIST_RESULT, m_lstResult);
- int AddString(LPCTSTR lpszItem); //아이템 추가
ex) m_lstResult.AddString(_T("아이템")); - int DeleteString(UNIT nIndex); //아이템 삭제(인덱스에 해당하는)
ex) m_lstResult.DeleteString(0); - int GetCount() const; //아이템 갯수 카운트
ex) int nCount = m_lstResult.GetCount(); - int GetCurSel() const; //선택한 아이템의 인덱스 반환
ex) int nSelect = m_lstResult.GetCurSel();
m_lstResult.DeleteString(nSelect); - void GetText(int nIndex, CString& rString) const; //해당 인덱스 아이템텍스트 얻어오기
ex) CString strResult;
m_lstResult.GetText(m_lstResult.GetCurSel(), strResult); - int SetCurSel(int nSelect); //해당 인덱스의 아이템 선택
ex) m_lstResult.SetCurSel(0); - void ResetContent(); //리스트박스의 모든 아이템 제거
ex) m_lstResult.ResetContent();
CComboBox 클래스 멤버함수
- CComboBox m_cmbVolume;
- DDX_Control(pDX, IDC_COMBO_VOLUME, m_cmbVolume);
- int AddString(LPCTSTR lpszItem); //아이템 추가
ex) m_cmbVolume.AddString(_T("아이템")); - int DeleteString(UNIT nIndex); //아이템 삭제(인덱스에 해당하는)
ex) m_cmbVolume.DeleteString(0); - int GetCount() const; //아이템 갯수 카운트
ex) int nCount = m_lstResult.GetCount(); - int GetCurSel() const; //선택한 아이템의 인덱스 반환
ex) int nSelect = m_cmbVolume.GetCurSel();
m_cmbVolume.DeleteString(nSelect); - void GetLBText(int nIndex, CString& rString) const; //해당 인덱스 아이템텍스트 얻어오기
ex) CString strResult;
m_cmbVolume.GetLBText(m_cmbVolume.GetCurSel(), strResult); - int SetCurSel(int nSelect); //해당 인덱스의 아이템 선택
ex) m_cmbVolume.SetCurSel(0); - void ResetContent(); //콤보박스의 모든 아이템 제거
ex) m_cmbVolume.ResetContent();