티스토리 뷰

오늘은 MFC에서 List box를 사용해서 체크 박스를 여러 개 만드는 예제를 만들어 보겠습니다.

MFC가 도구 상자에서 제공하는

Check box를 사용하지않고 List box를 사용해  만들어 보겠습니다.

List box를 사용하게 되면 데이터 관리도 편하게 할 수 있고

더 편하게 코딩 하실 수 있으실겁니다~!

 

 

먼저 리소스 뷰에 Dialog로 가서 다이얼로그를 편집해보겠습니다.

글자가 작으면 보기 불편하니 속성창 Font에 글자 크기나 폰트를 사용자가 원하는 대로 바꾸어줍니다.

 

도구 상자에서 ListBox를 가져와 다이얼로그에 그려줍니다.

그리고 여기서 중요한 게 subclassing기능을 사용할 것이기 때문에

ListBox의 속성 창에 가서 아래 사진 처럼

Has strings를 true로 바꿔주시고

Owner draw 또한 fixed로 바꾸어줍니다.

 

그리고 listbox ID는 IDC_LIST1로 바꾸지 않고 초기 상태를 유지시켜 사용했습니다.

 

 

그다음 이제 헤더파일의 Dlg.h에 가서

아래와 같이 private로

CCheckListBox 변수인 m_check_list를 추가시켜줍니다.

private:
    CCheckListBox m_check_list;
cs

 

 

소스 파일에 dlg.cpp로 가줍니다.

그리고 OnInitDialog()에 가서

m_check_list.SubclassDlgItem(IDC_LIST1, this);  코드를 추가시켜줍니다.

방금 만들었던 m_check_list와 다이얼로그의 listbox ID인 IDC_LIST1을

서로 연결시켜주는 코드입니다.

 

다음으로 리스트 박스에 순서대로 원하는 데이터를 넣어주기 위해

m_check_list.InsertString(i, L"메뉴"); 를 원하는 만큼 추가시켜줍니다.

BOOL CCheckBoxDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    
    SetIcon(m_hIcon, TRUE);            
    SetIcon(m_hIcon, FALSE);        
 
    m_check_list.SubclassDlgItem(IDC_LIST1, this); // IDC_LIST1 과 m_check_list를 연결하겠다.
 
    m_check_list.InsertString(0, L"치킨");
    m_check_list.InsertString(1, L"피자");
    m_check_list.InsertString(2, L"햄버거");
    m_check_list.InsertString(3, L"떡볶이");
 
    return TRUE;  
}
cs

 

여기까지 코드는 완성되었고 실행시켜주시면 아래 사진처럼

리스트 박스에 차례 대로 정렬돼서 나오게됩니다.

그냥 도구 상자에 체크 박스를 가져와서 쓰면

하나하나 ID를 부여해야하고 위치도 잡아줘야해서 매우 불편합니다.

이런 점을 해결할 수 있는게 이 방법이라고 생각합니다.

 

 

메뉴 옆 체크 상자에 체크 또한 가능합니다.

 

 

 

마지막으로 더 많은 메뉴를 넣는 상황이 생길 수 있으니

코드를 좀 더 편리하게 바꾸어 주겠습니다.

 

m_check_list.InsertString(0, L"치킨");

m_check_list.InsertString(1, L"피자");

m_check_list.InsertString(2, L"햄버거");

m_check_list.InsertString(3, L"떡볶이");

아까 적었던 이 코드를

 

 

wchar_t* menu_list[4]{

L"치킨" , L"피자" , L"햄버거" , L"떡볶이"

};

for (int i = 0; i < 4; i++) {

m_check_list.InsertString(i, menu_list [i]);

}

 

이렇게 메뉴 배열을 만들고

for문을 사용해 리스트 박스에 넣어 주시면

더 많은 데이터들을 편하게 관리할 수 있고 리스트 박스에 삽입할 수 있습니다. :)