mfc_ListBox - 8BitsCoding/RobotMentor GitHub Wiki

ListBox ๊ธฐ์ดˆ

EditBox Text ์ฝ์–ด์˜ค๊ธฐ

void CMFCApplication1Dlg::OnBnClickedAddBtn()
{
	CString str;
	GetDlgItemText(IDC_EDIT_BOX, str);
}

ListBox ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๊ธฐ

ListBox ์šฐํด๋ฆญ -> ๋ณ€์ˆ˜ ์ถ”๊ฐ€ -> ์ด๋ฆ„์ง€์ •

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ListBox์˜ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ์ด ๋งŽ๊ธฐ์— ๋‹จ์ˆœ GetDlgItemText, SetDlgItemText ๋“ฑ์„ ์ด์šฉํ•˜๊ธฐ์—๋Š” ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ.

void CMFCApplication1Dlg::OnBnClickedAddBtn()
{
	CString str;
	GetDlgItemText(IDC_EDIT_BOX, str);

    m_data_list.AddString(str);
}

์ด๋ฏธ์ง€

๊ทธ๋Ÿฐ๋ฐ? ListBox์— ๋“ค์–ด๊ฐ€๋Š” ๊ธ€์ž๋Š” ์ •๋ ฌ์ด๋˜๊ณ ,

๋‚ด๊ฐ€ ์–ด๋””์— ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด??

void CMFCApplication1Dlg::OnBnClickedAddBtn()
{
	CString str;
	GetDlgItemText(IDC_EDIT_BOX, str);

    int index = m_data_list.AddString(str);
    m_data_list.SetCurSel(index);
}

์ด๋ฏธ์ง€

์ถ”๊ฐ€์™€ ๋™์‹œ์— ์ปค์„œ๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ปค์„œ์— ๋”ฐ๋ผ์„œ EditBox์— ์ถœ๋ ฅ์„ ํ•ด๋ณด์ž.

์ด๋ฏธ์ง€

LBN_SELCHANGE ์žฌ ์ •์˜

void CMFCApplication1Dlg::OnLbnSelchangeDataList()
{
	int index = m_data_list.GetCurSel();

	if (index != LB_ERR)	// LB_ERR : ListBox Error
	{
		CString str;
		m_data_list.GetText(index, str);

		SetDlgItemText(IDC_EDIT_BOX, str);
	}
}

์—ฌ๊ธฐ์„œ ๋ถ€ํ„ฐ ์‹ฌํ™”

๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด๋ณด์ž.

์ด๋ฏธ์ง€

์ด๋ ‡๊ฒŒ๋Š” ํ•˜์ง€๋ง์ž

void CMFCApplication1Dlg::OnBnClickedAddBtn()
{
	CString str, name_str;
	GetDlgItemText(IDC_EDIT_BOX, name_str);

	int age = GetDlgItemInt(IDC_AGE_EDIT);

    str.Format(L"%s, %d", name_str, age);

	int index = m_data_list.AddString(str);
	m_data_list.SetCurSel(index);
}
void CMFCApplication1Dlg::OnLbnSelchangeDataList()
{
	int index = m_data_list.GetCurSel();

	if (index != LB_ERR)	// LB_ERR : ListBox Error
	{
		CString str;
        wchar_t temp[32];
        int age;

		m_data_list.GetText(index, str);
        for(int i = 0; i < str.GetLength(); i++) {
            if(str[i] == ',') {
                temp[i] = 0;
                SetDlgItemText(IDC_EDIT_BOX, temp);
                age = _wtoi((const wchar_t *)str + i + 1);
                SetDlgItemInt(IDC_AGE_EDIT, age);
            } else {
                temp[i] = str[i];
            }
        }

		SetDlgItemText(IDC_EDIT_BOX, str);
	}
}

๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค!

// Dlg.h

struct FriendData
{
    wchar_t name[24];
    int age;
    wchar_t phone[24];
};
void CMFCApplication1Dlg::OnBnClickedAddBtn()
{
	CString str, name_str, phone_str;
	GetDlgItemText(IDC_EDIT_BOX, name_str);
    GetDlgItemText(IDC_PHONE_EDIT, phone_str);
	int age = GetDlgItemInt(IDC_AGE_EDIT);

    FriendData *p = new FriendData;
    wcscpy_s(p->name, 24, name_str);
    wcscpy_s(p->phone, 24, phone_str);
    p->age = age;

    str.Format(L"%s(%d)", name_str, age);

	int index = m_data_list.AddString(str);
    m_data_list.SetItemDataPtr(index, p);       // ListBox์—๋Š” pointer๋ฅผ ํ•˜๋‚˜ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.
	m_data_list.SetCurSel(index);
}
void CMFCApplication1Dlg::OnLbnSelchangeDataList()
{
	int index = m_data_list.GetCurSel();

	if (index != LB_ERR)	// LB_ERR : ListBox Error
	{
        FriendData *p = (FriendData *)m_data_list.GetItemDataPtr(index);
		
		SetDlgItemText(IDC_EDIT_BOX, p->name);
        SetDlgItemText(IDC_PHONE_EDIT, p->phone);
        SetDlgItemInt(IDC_AGE_EDIT, p->age);
	}
}

๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์€??

void CMFCApplication1Dlg::OnBnClickedAddBtn()
{
	CString str;
    FriendData *p = new FriendData;
	GetDlgItemText(IDC_EDIT_BOX, p->name, 24);
    GetDlgItemText(IDC_PHONE_EDIT, p->phone, 24);
	p->age = GetDlgItemInt(IDC_AGE_EDIT);

    str.Format(L"%s(%d)", p->name, p->age);

	int index = m_data_list.AddString(str);
    m_data_list.SetItemDataPtr(index, p);       // ListBox์—๋Š” pointer๋ฅผ ํ•˜๋‚˜ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.
	m_data_list.SetCurSel(index);
}

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ!!

void CMFCApplication1Dlg::OnDestroy()
{
    CDialogEX::OnDestroy();

    int count = m_data_list.GetCount();

    FriendData * p;
    for( int i = 0; i < count; i++ ){
        p = (FriendData*)m_data_list.GetItemDataPtr(i);
        delete p;
    }
    m_data_list.ResetContent();
}