티스토리 뷰

Programming language

MFC ListBox 사용 예제

taehwan 2012. 5. 15. 00:54
728x90

프로그램 설명

 아래와 같은 레이아웃을 가지며, 왼쪽 리스트의 내용을 오른쪽으로 이동하고, 그 반대로도 가능하도록 구현하였습니다. 추가는 왼쪽 리스트에만 가능하며, 삭제는 양쪽 모두 가능합니다. 추가시에는 중복된 값이 없어야 합니다.


추가 할 경우 아래와 같이 중복 메시지를 표현합니다.


삭제는 왼쪽 리스트와 오른쪽 리스트 모두에서 가능합니다.


주요 소스코드

 프로젝트명은 ex00ex1 입니다.


ex00ex1.h 주요 코드 생성부분

public:
	CListBox m_listLeft;
	CListBox m_listRight;
	afx_msg void OnBnClickedButton1();
	afx_msg void OnBnClickedButton2();
	CString m_strValue;
	afx_msg void OnBnClickedButtonAdd();
	afx_msg void OnBnClickedButtonSub();


ex00ex1.cpp

void Cex00ex1Dlg::OnBnClickedButton1() //--> 방향 버튼
{
	// TODO: Add your control notification handler code here
	CString tmp; //tmp CString 변수
	int nIndex = m_listLeft.GetCurSel(); //현재 선택되어있는 Sel을 가지고 옴

	if(nIndex != LB_ERR)
	{
		m_listLeft.GetText(nIndex, tmp); //선택된 cell에 text를 tmp에 복사
		m_listLeft.DeleteString(nIndex); //왼쪽 list의 목록을 삭제
		m_listRight.AddString(tmp); //오른쪽 목록에 저장
	}
}


void Cex00ex1Dlg::OnBnClickedButton2() //<-- 방향 버튼
{
	// TODO: Add your control notification handler code here
	CString tmp;
	int nIndex = m_listRight.GetCurSel();

	if(nIndex != LB_ERR)
	{
		m_listRight.GetText(nIndex, tmp);
		m_listRight.DeleteString(nIndex);
		m_listLeft.AddString(tmp);
	}
}

void Cex00ex1Dlg::OnBnClickedButtonAdd() //추가 버튼
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_strValue.GetString() != NULL) 
	{
		int nIndex = m_listLeft.FindStringExact(-1, m_strValue); //왼쪽 목록에서 검색
		int nIndex2 = m_listRight.FindStringExact(-1, m_strValue); //오른쪽 목록에서 검색
		CString str, str2;

		if(nIndex == LB_ERR && nIndex2 == LB_ERR) //왼쪽 목록과 오른쪽 목록 모두가 없을 경우를 확인
		{
			m_listLeft.AddString(m_strValue); //왼쪽 목록에만 추가
		}
		else
			AfxMessageBox("중복");
	}
}

void Cex00ex1Dlg::OnBnClickedButtonSub() //목록에서 제거
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_strValue.GetString() != NULL) //NULL이 아닐경우
	{
		int nIndex = m_listLeft.FindStringExact(-1, m_strValue); //왼쪽 목록에서 검색
		
		if(nIndex != LB_ERR)
		{
			m_listLeft.DeleteString(nIndex); //왼쪽 목록에 있다면 삭제
		}
		else
		{ //없을 경우 오른쪽 목록에서 삭제
			nIndex = m_listRight.FindStringExact(-1, m_strValue);
			m_listRight.DeleteString(nIndex);
		}
	}
}






댓글