본문 바로가기

코드^학습/메모한 지식

[MFC]콤보박스 동적으로 생성하기, 콤보박스 선택할 때 이벤트

웹에서 보면 1단계 콤보박스 값에 따라서 2단계의 값이 결정되곤 합니다.


보통 그때그때 새로운 값을 넣어주는데요..


MFC에서는 Init단계에서 초기화 해주지 못하면 새로 생성할 때 많은 애로사항이 꽃핍니다.


그러므로 동적으로 생성해주는 방법을 떠올리게 되는거죠.


그 방법을 소개합니다.


CComboBox m_ctrlCombo;

RECT rc={0, 0, 100, 20};


if (!m_ctrlCombo.Create(CBS_DROPDOWN|WS_CHILD|WS_VSCROLL|WS_TABSTOP|WS_VISIBLE, rc, this, 2115))

    AfxMessageBox(_T("combo box 생성 error!"));


CFont* pFont = GetFont();

if (pFont == NULL)

    AfxMessageBox(_T("Font Error error!"));

m_ctrlCombo.SetFont(pFont);


m_ctrlCombo.AddString(_T("STRING1"));

m_ctrlCombo.AddString(_T("STRING2"));

m_ctrlCombo.SetCurSel(0);


[출처 : http://hizstory.tistory.com/56 , 갱우덩님 블로그]


위와 같이 처리하면 동적으로 콤보박스를 만들 수 있습니다!


물론 다른 편집 다이얼로그도 마찬가지겠죠?


그런데


보통 동적으로 생성하면 선택할 때 동적으로 내용을 채워야겠죠?


그렇다면! 콤보박스를 선택했을 때


어떤 이벤트가 오도록 만든다면


콤보박스 1단계 값에 따라서 2단계 콤보박스에 넣을 값을 정할 수 있습니다.


그 방법은 아래와 같죠!


MESSAGE_MAP 부분에 

    "ON_CBN_SELCHAGNE(IDC_COMBO, &Dlg::OnCbnSelChange)" 
와 같이 메시지 처리기를 등록하시고 

void OnCbnSelChange(); 
void Dlg::OnCbnSelChange() 

    MessageBox("test"); 
}


[출처 : http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=26145, 팁스소프트]


이렇게하면 유연한 MFC 다이얼로그를 만들 수 있습니다!