728x90
300x250
[MFC] 윈도우 프로그래밍 기초 - 리스트박스 컨트롤(Listbox Control)

 

짬좀 차신 여러분 지금까지 오신 걸 환영합니다.

여러분들은 다양한 컨트롤들을 체험해보시고 계십니다.?

 

 

먼저

결과물을 확인해보겠습니다.

 


1. 결과물

 

 


2. 레이아웃 설계

 

 

알아서 디자인 하시는 거 알죠??

 

 컨트롤 ID

 CAPTION

 범주(T)

 맴버 변수(N)

 이벤트 처리기

 IDC_STATIC

 계급

 X

 X

 X

 IDC_STATIC

 이름

 X

 X

 X

 IDC_LIST1

 

 Control

 m_ListLevel

 X

 IDC_LIST2

 

 Control

 m_ListName

 X

 IDC_BUTTON1

 조회

 X

 X

 OnBnClickedButton1

 IDC_BUTTON2

 이름 선택 삭제

 X

 X

 OnBnClickedButton2 

 


3. 코드 작성

 

 // CExampleDlg 메시지 처리기

BOOL CExampleDlg::OnInitDialog()
{

            // 중략

            // TODO: 여기에 추가 초기화 작업을 추가합니다.
            m_ListLevel.InsertString(0, _T("이병"));
            m_ListLevel.InsertString(1, _T("일병"));
            m_ListLevel.InsertString(2, _T("상병"));
            m_ListLevel.InsertString(3, _T("병장"));

            

            m_ListName.InsertString(0, _T("도도1"));
            m_ListName.InsertString(1, _T("도도2"));
            m_ListName.InsertString(2, _T("도도3"));
            m_ListName.InsertString(3, _T("도도4"));

 

               return TRUE;

}

 (사용자 프로젝트명)Dlg.cpp - OnInitDialog() 함수 내 입력

 

 



{
        CString strTmp, strMsg;
        int levelidx = m_ListLevel.GetCurSel();
        int nameidx = m_ListName.GetCurSel();

 

        // 계급장
        if (levelidx != -1 && nameidx != -1)
       {
              m_ListLevel.GetText(levelidx, strTmp);

              strMsg.Append(strTmp + " "); // 1. strMsg에 m_ListLevel의 값 = 입력 추가

              m_ListName.GetText(nameidx, strTmp);

              strMsg.Append(strTmp);   // 2. strMsg에 m_ListName의 값 = 입력 추가

              AfxMessageBox(strMsg);   // 3. 출력

         }
         else
              AfxMessageBox(_T("선택 후 사용해라. 좋은 말할때"));


}


void CExampleDlg::OnBnClickedButton2()
{
         CString strMsg;
         int idx;

         idx = m_ListName.GetCurSel();

 

         if (idx == -1)
        {
               strMsg.Format(_T("idx:%d, 선택 후 사용하세요."), idx);
               AfxMessageBox(strMsg);
         }
         else
               m_ListName.DeleteString(idx);

 

}
 

 ExampleDlg.cpp -> 버튼 이벤트 처리
 -> OnBnClickedButton1(  ), OnBnClickedButton2(  )

 


4. 몇 가지 ListBox 소개

 

ListBox에서 컨트롤 맴버 함수에 대해 소개하겠습니다.

리스트박스 컨트롤은 CListBox 클래스를 사용하며, CListBox 클래스는 다음과 같은 멤버 함수들을 가지고 있습니다.

 

afxwin에 위치함.

함수 원형 

설명 

 int AddString(LPCTSTR lpszItem)

 리스트 박스의 문자열 항목을 추가할 때 사용함. (순서 상관없이)

 int InsertString(int nIndex, LPCTSTR lpszItem)

 리스트 박스의 문자열 항목 추가에 사용함. (특정 위치, 순서 있음.)

 int DeleteString(UINT nIndex)

 특정 위치의 항목을 삭제함.

 void ResetContent( )

 리스트 박스의 내용 초기화

 int GetCurSel( )

 리스트 박스 내 현재 선택한 값의 인덱스 값 반환

 int SetCurSel( int nSelect )

 특정 아이템을 선택함.

 -> 원하는 인덱스에 커서를 위치시키고 싶을 때

 void GetText(int nIndex, CString & rString)

 int GetText(_In_ int nIndex, _Pre_notnull_ _Post_z_ LPTSTR lpszBuffer) const;
 void GetText(int nIndex, CString& rString) const;
 int GetTextLen(int nIndex) const;

 특정 인덱스에 위치한 문자열을 획득

 ex) CString aaa;라고 선언

 

 m_List1.GetText( 0, aaa); 라고 하면

 가져올 수 있음.

 

 int GetTextLen(int nIndex) const;

 특정 인덱스의 문자열 길이를 반환

 

 콤보박스(ComboBox)는 사용법이 거의 같으므로 생략합니다.

 

반응형

+ Recent posts