[CHAPTER 04] 대화상자

2023. 5. 17. 21:31기타(이론)/C++ MFC 윈도우 프로그래밍

1) CDialogEx 클래스

CObject
CCmdTarget
CWnd
CDialog
CDialogEx

2) 대화상자 기반의 프로그램

클래스 기저 클래스 설명
애플리케이션 클래스 CWinApp 프로젝트 전체를 관리하는 클래스
대화상자 클래스 CDialogEx 대화상자의 기능을 구현하는 실제적인 클래스
도움말 대화상자 클래스 CDialogEx 도움말 정보 클래스

3) MFC 기본 컨트롤

1) Static Text : 화면에 문자열을 배치할 때 사용, 사용자로부터 명령을 받아들이지도 않고 출력을 내보내지도 않는 Label (레이블) 용도로 사용됨.
2) Edit Control : 문자열을 입력하고 편집할 수 있도록 해주는 컨트롤. 주로 문자열 입력받을 때 사용.
3) Group Box : 서로 연관된 컨트롤들 시각적으로 묶어 구분.
4) Button Control : 마우스로 클릭하여 동작 수행
5) Check Box : Button Control의 일종으로 마우스로 클릭하면 체크 표시가 on/off 된다.
6) Radio Button : Button Control의 일종으로 마우스로 클릭하면 라디오 표시가 on/off 된다.
7) List Box : 사용자가 선택할 수 있는 항목들 나열, 선택 가능
8) Combo Box : List Box 단점 해결, Edit + List 모양
void CPractice4aDlg::UpdateComboBox()
{
	// TODO: 여기에 구현 코드 추가.
	int nCnt = m_listBox.GetCount(); //리스트 박스의 현재 아이템 수 반환
	m_cbListItem.ResetContent(); //콤보 박스의 모든 아이템 삭제

	for (int i = 0; i < nCnt; i++)
	{
		CString strItem;
		strItem.Format(_T("리스트 항목 : %d"), i + 1);
		m_cbListItem.AddString(strItem);
	}
}


//void CAboutDlg::OnRadio1()
//{
	// TODO: 여기에 명령 처리기 코드를 추가합니다.
//	m_listBox.AddString(_T("1번 라디오 버튼 선택"));
//	UpdateComboBox();
//}


void CPractice4aDlg::OnRadio1()
{
	// TODO: 여기에 명령 처리기 코드를 추가합니다.
	m_listBox.AddString(_T("1번 라디오 버튼 선택"));
	UpdateComboBox();
}


void CPractice4aDlg::OnRadio2()
{
	// TODO: 여기에 명령 처리기 코드를 추가합니다.
	m_listBox.AddString(_T("2번 라디오 버튼 선택"));
	UpdateComboBox();
}


void CPractice4aDlg::OnClickedCheck1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다..
	if (m_bChecked[0] == FALSE)
	{
		m_bChecked[0] = TRUE;
		m_listBox.AddString(_T("1번 체크 박스 상태 TRUE"));
	}
	else
	{
		m_bChecked[0] = FALSE;
		m_listBox.AddString(_T("1번 체크 박스 상태 FALSE"));
	}
	UpdateComboBox();
}


void CPractice4aDlg::OnClickedCheck2()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	if (m_bChecked[1] == FALSE)
	{
		m_bChecked[1] = TRUE;
		m_listBox.AddString(_T("2번 체크 박스 상태 TRUE"));
	}
	else
	{
		m_bChecked[1] = FALSE;
		m_listBox.AddString(_T("2번 체크 박스 상태 FALSE"));
	}
	UpdateComboBox();
}


void CPractice4aDlg::OnClickedButtonAdd()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	UpdateData(TRUE);
	if (m_strEdit.IsEmpty() == false)
	{
		m_listBox.AddString(m_strEdit);
		m_strEdit.Empty();
	}
	else
	{
		AfxMessageBox(_T("에디트 상자에 문자열이 없습니다."));
	}
	UpdateData(FALSE);
	UpdateComboBox();
}


void CPractice4aDlg::OnClickedButtonInsert()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	CString strSelText;
	int index = m_cbListItem.GetCurSel();
	if (index != CB_ERR)
	{
		m_listBox.GetText(index, strSelText);
		m_listBox.AddString(strSelText);
		UpdateComboBox();
	}
	else
	{
		AfxMessageBox(_T("콤보 박스에서 삽입할 아이템을 선택하세요."));
	}
}


void CPractice4aDlg::OnClickedButtonDelete()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	int index = m_cbListItem.GetCurSel();
	if (index != CB_ERR)
	{
		m_listBox.DeleteString(index);
		UpdateComboBox();
	}
	else
	{
		AfxMessageBox(_T("콤보 박스에서 삭제할 아이템을 선택하세요."));
	}
}​