본문 바로가기

API

MFC 수정가능한 ComboBox 구현

■ Editable한 ComboBox의 Item 변경하기( Combo Type은 DropDown )


1. 콤보박스 생성

2. (선택)콤보박스 멤버변수 만들기

3. 콤보박스 이벤트( CBN_EDITCHANGE )추가 

4. CBN_EDITCHANGE함수에서 m_Combo.GetWindowText( CString )를 통해 콤보박스에 입력된 스트링을 불러옴

( ※ 이때 GetCurSel의 반환값이 선택된 위치가 아닌 CB_ERR를 반환하게 됨 즉, 수정 후에는 GetCurSel이 파괴됨 -1을 반환하니 65535 이런값을 반환해줄것임 WORD형이니깐 )

5. 수정하고자하는 콤보의 위치의 아이템을 DeleteString( index ); 

( ※ 찾아봤지만 InsertString은 가능하지만 이후에 수정하는 함수는 없는 것으로 보임 그래서 지우고 난뒤 InsertString() )

6. 수정하고자하는 콤보의 위치에 입력으로 받아놓은 String을 InsertString( index, CString );

7. 콤보의 아이템 스트링 변경 완료


=============================================

■ GetCurSel()이 CB_ERR에러를 반환하고 있을때 처리법

간단함

if( GetCurSel() == CB_ERR )

일 때, 수정했던 커서의 위치를 강제로 넣어주면 됨. 

아니면, CBN_SELCHANGE같은 이벤트처리를 통해 다시 SetCurSel(수정한콤보위치)를 통해 Update 되도록 하거나



※ 알아두면 좋은 콤보관련 호출 시점

CBN_EDITUPDATE : Edit를 시도 하자마자 호출됨

CBN_EDITCHANGE : Edit를 시도한 뒤에 호출됨