- Function description:
Dropdown menu(Combo Box)의 3개 항목중 하나를 선택시 이와 연동된 List Box내의 항목이 변경된다.
- Procedure
1) Dialog Box solution setting.
2) Tool box를 이용하여 전반적인 Dialog Box를 design한다.(place combo box and list box)
3) Property 수정(of each box)
-Combo Box
.Appearance>Type>을 Drop List 로 변경:Edit 불가능한 List box로 설정
(즉, edit control의 속성이 사라짐. cf) 'Drop Down' type은 편집가능한 List box)
.ID변경: 'IDC_COMBO_Address'등 임의로 변경.
.Add variable>category중 'control'혹은 'value' 선택 => 둘의 차이를 아직 명확히 모르겠음..
.variable name 입력(ex. m_Combo_Address)
.OnInitDialog()함수에서 AddString()을 사용하여 문자열 항목 추가.
ex) m_Combo_Address.AddString(_T("A"));
.목록상자에서 선택한 항목이 변경되었을 때 발생하는 '통지메시지'등록:
CBN_SELCHANGE->OnCbnSelChangeComboAddress()함수 등록
.위의 함수내에 GetCurSel()함수 이용하여, 현재 선택된 항목의 Index를 읽어옴.
ex)int nIndex=m_Combo_Address.GetCurSel();
.switch/case문을 이용하여 nIndex값에 따라 List Box에 항목 도시
ex)switch(nIndex)
{
case 0:
m_List.AddString(_T("A"));
..
..
-분석:
1. 이경우 문제점 발생: Combo box에서 항목 선택시, List box에, 이전 항목 아래에 List가 계속 추가됨.
화면이 업데이트가 되도록 하거나(refresh), 'AddString()'이 아닌(더하는 것이 아닌) 단순히 출력하는 함수로 구현해야 함. -> 근데 그게 뭔지 모르겠음.
-주요 function
1.UpdateData(): 특정 변수와 컨트롤 윈도우간에 정보교환이 일어나도록 하는 함수(p.392)
2.CBN_SELCHANGE 통지 메시지: OnCbnSelChangexxx() 함수
combo box에서 항목 선택 변경이 일어났을 때 발생하는 메시지로
On CbnSelChange()함수 호출. (List Box에서는 LBN_SELCHANGE 메시지)
3.GetCurSel(): 마우스로 선택된 항목을 int형 index로 읽어옴.(0번부터 시작됨).
-TODO
1.Add variable시 category의 'controll'과 'value'의 의미를 명확히 파악하라
control로 하면 variable type은 "CComboBox"
variable로 하면 variable type은 "CString"
2.ListBox에 문자열 출력하는 방법은 무엇인가.(AddString, InsertSting말고)
댓글 없음:
댓글 쓰기