다음을 통해 공유


CListBox 수업

Windows 목록 상자의 기능을 제공합니다.

구문

class CListBox : public CWnd

멤버

공용 생성자

속성 설명
CListBox::CListBox CListBox 개체를 생성합니다.

공용 메서드

이름 설명
CListBox::AddString 목록 상자에 문자열을 추가합니다.
CListBox::CharToItem 문자열이 없는 소유자 그리기 목록 상자에 대한 사용자 지정 WM_CHAR 처리를 제공하도록 재정의합니다.
CListBox::CompareItem 정렬된 소유자 그리기 목록 상자에서 새 항목의 위치를 결정하기 위해 프레임워크에서 호출됩니다.
CListBox::Create Windows 목록 상자를 만들어 개체에 CListBox 연결합니다.
CListBox::DeleteItem 사용자가 소유자 그리기 목록 상자에서 항목을 삭제할 때 프레임워크에서 호출됩니다.
CListBox::DeleteString 목록 상자에서 문자열을 삭제합니다.
CListBox::Dir 현재 디렉터리의 파일 이름, 드라이브 또는 둘 다를 목록 상자에 추가합니다.
CListBox::DrawItem 소유자 그리기 목록 상자의 시각적 측면이 변경되면 프레임워크에서 호출됩니다.
CListBox::FindString 목록 상자에서 문자열을 검색합니다.
CListBox::FindStringExact 지정된 문자열과 일치하는 첫 번째 목록 상자 문자열을 찾습니다.
CListBox::GetAnchorIndex 목록 상자에서 현재 앵커 항목의 인덱스(0부터 시작하는 인덱스)를 검색합니다.
CListBox::GetCaretIndex 다중 선택 목록 상자에 포커스 사각형이 있는 항목의 인덱스를 결정합니다.
CListBox::GetCount 목록 상자의 문자열 수를 반환합니다.
CListBox::GetCurSel 목록 상자에서 현재 선택한 문자열의 인덱스(0부터 시작하는 인덱스)를 반환합니다.
CListBox::GetHorizontalExtent 목록 상자를 가로로 스크롤할 수 있는 너비를 픽셀 단위로 반환합니다.
CListBox::GetItemData 목록 상자 항목과 연결된 값을 반환합니다.
CListBox::GetItemDataPtr 목록 상자 항목에 대한 포인터를 반환합니다.
CListBox::GetItemHeight 목록 상자에서 항목의 높이를 결정합니다.
CListBox::GetItemRect 현재 표시된 목록 상자 항목의 경계 사각형을 반환합니다.
CListBox::GetListBoxInfo 열당 항목 수를 검색합니다.
CListBox::GetLocale 목록 상자의 로캘 식별자를 검색합니다.
CListBox::GetSel 목록 상자 항목의 선택 상태를 반환합니다.
CListBox::GetSelCount 다중 선택 목록 상자에서 현재 선택된 문자열 수를 반환합니다.
CListBox::GetSelItems 목록 상자에서 현재 선택된 문자열의 인덱스를 반환합니다.
CListBox::GetText 목록 상자 항목을 버퍼에 복사합니다.
CListBox::GetTextLen list-box 항목의 길이를 바이트 단위로 반환합니다.
CListBox::GetTopIndex 목록 상자에 표시되는 첫 번째 문자열의 인덱스 값을 반환합니다.
CListBox::InitStorage 목록 상자 항목 및 문자열에 대한 메모리 블록을 미리 할당합니다.
CListBox::InsertString 목록 상자의 특정 위치에 문자열을 삽입합니다.
CListBox::ItemFromPoint 한 지점에 가장 가까운 목록 상자 항목의 인덱스 값을 반환합니다.
CListBox::MeasureItem 목록 상자 차원을 결정하기 위해 소유자 그리기 목록 상자를 만들 때 프레임워크에서 호출됩니다.
CListBox::ResetContent 목록 상자에서 모든 항목을 지웁니다.
CListBox::SelectString 단일 선택 목록 상자에서 문자열을 검색하고 선택합니다.
CListBox::SelItemRange 다중 선택 목록 상자에서 문자열 범위를 선택하거나 선택 취소합니다.
CListBox::SetAnchorIndex 다중 선택 목록 상자의 앵커를 설정하여 확장된 선택을 시작합니다.
CListBox::SetCaretIndex 포커스 사각형을 다중 선택 목록 상자에 지정된 인덱스 항목으로 설정합니다.
CListBox::SetColumnWidth 여러 열 목록 상자의 열 너비를 설정합니다.
CListBox::SetCurSel 목록 상자 문자열을 선택합니다.
CListBox::SetHorizontalExtent 목록 상자를 가로로 스크롤할 수 있는 너비를 픽셀 단위로 설정합니다.
CListBox::SetItemData 목록 상자 항목과 연결된 값을 설정합니다.
CListBox::SetItemDataPtr 목록 상자 항목에 대한 포인터를 설정합니다.
CListBox::SetItemHeight 목록 상자에 있는 항목의 높이를 설정합니다.
CListBox::SetLocale 목록 상자의 로캘 식별자를 설정합니다.
CListBox::SetSel 다중 선택 목록 상자에서 목록 상자 항목을 선택하거나 선택 취소합니다.
CListBox::SetTabStops 목록 상자에서 탭 중지 위치를 설정합니다.
CListBox::SetTopIndex 목록 상자에 표시되는 첫 번째 문자열의 인덱스(0부터 시작)를 설정합니다.
CListBox::VKeyToItem 스타일 집합이 있는 목록 상자에 대한 사용자 지정 WM_KEYDOWN 처리를 제공하도록 재정의 LBS_WANTKEYBOARDINPUT 합니다.

설명

목록 상자에는 사용자가 보고 선택할 수 있는 파일 이름과 같은 항목 목록이 표시됩니다.

단일 선택 목록 상자에서 사용자는 하나의 항목만 선택할 수 있습니다. 다중 선택 목록 상자에서 항목 범위를 선택할 수 있습니다. 사용자가 항목을 선택하면 항목이 강조 표시되고 목록 상자가 부모 창에 알림 메시지를 보냅니다.

대화 상자 템플릿에서 또는 코드에서 직접 목록 상자를 만들 수 있습니다. 개체를 직접 만들려면 개체를 CListBox 생성한 다음 멤버 함수를 호출 Create 하여 Windows 목록 상자 컨트롤을 만들고 개체에 CListBox 연결합니다. 대화 상자 템플릿에서 목록 상자를 사용하려면 대화 상자 클래스에서 목록 상자 변수를 선언한 다음 DDX_Control 대화 상자 클래스의 DoDataExchange 함수에서 멤버 변수를 컨트롤에 연결합니다. 이 작업은 대화 상자 클래스에 컨트롤 변수를 추가할 때 자동으로 수행됩니다.

생성은 에서 파생된 CListBox클래스의 1단계 프로세스일 수 있습니다. 파생 클래스에 대한 생성자를 작성하고 생성자 내에서 호출 Create 합니다.

목록 상자에서 부모로 보낸 Windows 알림 메시지(일반적으로 파생된 CDialog클래스)를 처리하려면 각 메시지에 대한 부모 클래스에 메시지 맵 항목 및 메시지 처리기 멤버 함수를 추가합니다.

각 메시지 맵 항목은 다음 형식을 사용합니다.

ON_Notification( id, memberFxn )

여기서 id 는 알림을 보내는 list-box 컨트롤의 자식 창 ID를 지정하고 memberFxn 알림을 처리하기 위해 작성한 부모 멤버 함수의 이름입니다.

부모의 함수 프로토타입은 다음과 같습니다.

afx_msg void memberFxn( );

다음은 잠재적인 메시지 맵 항목 목록과 부모로 전송되는 사례에 대한 설명입니다.

  • ON_LBN_DBLCLK 사용자가 목록 상자에서 문자열을 두 번 클릭합니다. 스타일이 있는 LBS_NOTIFY 목록 상자만 이 알림 메시지를 보냅니다.

  • ON_LBN_ERRSPACE 목록 상자에서 요청을 충족하기에 충분한 메모리를 할당할 수 없습니다.

  • ON_LBN_KILLFOCUS 목록 상자에서 입력 포커스가 손실됩니다.

  • ON_LBN_SELCANCEL 현재 목록 상자 선택 영역이 취소되었습니다. 이 메시지는 목록 상자에 스타일이 있는 경우에만 전송됩니다 LBS_NOTIFY .

  • ON_LBN_SELCHANGE 목록 상자의 선택 영역이 변경되었습니다. 멤버 함수에 의해 선택 영역이 변경된 경우에는 이 알림이 CListBox::SetCurSel 전송되지 않습니다. 이 알림은 스타일이 있는 목록 상자에 LBS_NOTIFY 만 적용됩니다. LBN_SELCHANGE 선택 영역이 변경되지 않더라도 사용자가 화살표 키를 누를 때마다 다중 선택 목록 상자에 대한 알림 메시지가 전송됩니다.

  • ON_LBN_SETFOCUS 목록 상자가 입력 포커스를 받고 있습니다.

  • ON_WM_CHARTOITEM 문자열이 없는 소유자 그리기 목록 상자에서 메시지를 받습니다 WM_CHAR .

  • ON_WM_VKEYTOITEM 스타일이 있는 목록 상자가 LBS_WANTKEYBOARDINPUT 메시지를 받습니다 WM_KEYDOWN .

대화 상자 내에서(대화 상자 리소스 CListBox 를 통해) 개체를 만들 CListBox 면 사용자가 대화 상자를 닫으면 개체가 자동으로 제거됩니다.

창 내에서 개체를 CListBox 만드는 경우 개체를 삭제 CListBox 해야 할 수 있습니다. 스택에서 개체를 CListBox 만들면 자동으로 제거됩니다. 함수를 CListBox 사용하여 힙에 개체를 new 만드는 경우 사용자가 부모 창을 닫을 때 개체를 삭제하도록 개체를 호출 delete 해야 합니다.

개체에 메모리를 CListBox 할당하는 경우 소멸자를 재정 CListBox 의하여 할당을 삭제합니다.

상속 계층 구조

CObject

CCmdTarget

CWnd

CListBox

요구 사항

머리글: afxwin.h

CListBox::AddString

목록 상자에 문자열을 추가합니다.

int AddString(LPCTSTR lpszItem);

매개 변수

lpszItem
추가할 null로 끝나는 문자열을 가리킵니다.

Return Value

목록 상자의 문자열에 대한 인덱스(0부터 시작하는 인덱스)입니다. 반환 값은 LB_ERR 오류가 발생하는 경우입니다. 반환 값은 새 문자열을 저장할 공간이 부족한 경우입니다 LB_ERRSPACE .

설명

스타일이 포함된 목록 상자를 만들지 LBS_SORT 않은 경우 문자열이 목록의 끝에 추가됩니다. 그렇지 않으면 문자열이 목록에 삽입되고 목록이 정렬됩니다. 스타일이 아닌 LBS_HASSTRINGS 스타일로 목록 상자를 만든 LBS_SORT 경우 프레임워크는 멤버 함수에 대한 하나 이상의 호출로 CompareItem 목록을 정렬합니다.

목록 상자 내의 특정 위치에 문자열을 삽입하는 데 사용합니다 InsertString .

예시

// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
   str.Format(_T("item string %d"), i);
   m_myListBox.AddString(str);
}

CListBox::CharToItem

목록 상자의 부모 창이 목록 상자에서 메시지를 받을 때 프레임워크에서 호출됩니다 WM_CHARTOITEM .

virtual int CharToItem(
    UINT nKey,
    UINT nIndex);

매개 변수

nKey
사용자가 입력한 문자의 ANSI 코드입니다.

nIndex
list-box caret의 현재 위치입니다.

Return Value

키 입력에 대한 기본 동작을 수행할 목록 상자 항목의 인덱스 지정을 위한 추가 작업 또는 음수가 없는 경우 - 1 또는 - 2를 반환합니다. 기본 구현은 - 1을 반환합니다.

설명

메시지는 WM_CHARTOITEM 메시지를 받을 때 목록 상자에서 WM_CHAR 전송되지만 목록 상자가 다음 조건을 모두 충족하는 경우에만 전송됩니다.

  • 소유자 그리기 목록 상자입니다.

  • 스타일 집합이 LBS_HASSTRINGS 없습니다.

  • 항목이 하나 이상 있습니다.

이 함수를 직접 호출해서는 안 됩니다. 키보드 메시지의 사용자 지정 처리를 제공하도록 이 함수를 재정의합니다.

재정의에서 값을 반환하여 프레임워크에 수행한 작업을 알려야 합니다. 반환 값 - 1 또는 - 2는 항목 선택의 모든 측면을 처리했으며 목록 상자에서 추가 작업이 필요하지 않음을 나타냅니다. 1 또는 - 2를 반환하기 전에 선택 항목을 설정하거나 캐리트 또는 둘 다를 이동할 수 있습니다. 선택 항목을 설정하려면 사용 SetCurSel 하거나 SetSel. 캐리트를 이동하려면 .를 사용합니다 SetCaretIndex.

반환 값이 0 이상인 경우 목록 상자에서 항목의 인덱스를 지정하고 목록 상자가 지정된 항목의 키 입력에 대한 기본 작업을 수행해야 함을 나타냅니다.

예시

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
   // On a numeric key, move the caret up one item.
   if (isdigit(nChar) && (nIndex > 0))
   {
      SetCaretIndex(nIndex - 1);
   }
   // On an alphabetic key, move the caret down one item.
   else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
   {
      SetCaretIndex(nIndex + 1);
   }

   // Do not perform any default processing.
   return -1;
}

CListBox::CListBox

CListBox 개체를 생성합니다.

CListBox();

설명

두 단계로 개체를 CListBox 생성합니다. 먼저 생성자를 ClistBox 호출한 다음, Windows Create목록 상자를 초기화하고 CListBox연결합니다.

예시

// Declare a local CListBox object.
CListBox myListBox;

// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;

CListBox::CompareItem

정렬된 소유자 그리기 목록 상자에서 새 항목의 상대 위치를 결정하기 위해 프레임워크에서 호출됩니다.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

매개 변수

lpCompareItemStruct
구조체에 대한 긴 포인터입니다 COMPAREITEMSTRUCT .

Return Value

구조에 설명된 COMPAREITEMSTRUCT 두 항목의 상대 위치를 나타냅니다. 다음 값 중 어느 것이든 될 수 있습니다.

의미
-1 항목 1은 항목 2 앞에 정렬합니다.
0 항목 1과 항목 2는 동일하게 정렬합니다.
1 항목 1은 항목 2를 기준으로 정렬합니다.

구조에 대한 설명은 참조 CWnd::OnCompareItem 하세요 COMPAREITEMSTRUCT .

설명

기본적으로 이 멤버 함수는 아무 작업도 수행하지 않습니다. 스타일을 사용하여 소유자 그리기 목록 상자를 만드는 경우 목록 상자에 LBS_SORT 추가된 새 항목을 정렬하는 프레임워크를 지원하기 위해 이 멤버 함수를 재정의해야 합니다.

예시

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example compares two items using _tcscmp to sort items in reverse
// alphabetical order. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
   ASSERT(lpCompareItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
   ASSERT(lpszText1 != NULL);
   LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
   ASSERT(lpszText2 != NULL);

   return _tcscmp(lpszText2, lpszText1);
}

CListBox::Create

Windows 목록 상자를 만들어 개체에 CListBox 연결합니다.

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

매개 변수

dwStyle
목록 상자의 스타일을 지정합니다. 상자에 목록 상자 스타일의 조합을 적용합니다.

rect
목록 상자 크기와 위치를 지정합니다. 개체 또는 구조체일 CRect RECT 수 있습니다.

pParentWnd
목록 상자의 부모 창(일반적으로 개체)을 CDialog 지정합니다. 해서는 안 됩니다 NULL.

nID
목록 상자의 컨트롤 ID를 지정합니다.

Return Value

성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

두 단계로 개체를 CListBox 생성합니다. 먼저 생성자를 호출한 다음, Windows 목록 상자를 초기화하고 개체에 CListBox 연결하는 호출Create합니다.

실행되면 Create Windows는 WM_NCCREATE목록 상자 컨트롤에 , WM_CREATEWM_NCCALCSIZEWM_GETMINMAXINFO 메시지를 보냅니다.

이러한 메시지는 기본적으로 기본 클래스의 OnNcCreate, OnCreate, OnNcCalcSizeOnGetMinMaxInfo 멤버 함수에 CWnd 의해 처리됩니다. 기본 메시지 처리를 확장하려면 클래스를 CListBox파생시키고, 새 클래스에 메시지 맵을 추가하고, 이전 메시지 처리기 멤버 함수를 재정의합니다. 예를 들어 새 클래스에 필요한 초기화를 수행하려면 재정 OnCreate의합니다.

목록 상자 컨트롤에 다음 창 스타일을 적용합니다.

  • WS_CHILD

  • WS_VISIBLE 보통

  • WS_DISABLED 드물게

  • WS_VSCROLL 세로 스크롤 막대를 추가하려면

  • WS_HSCROLL 가로 스크롤 막대를 추가하려면

  • WS_GROUP 컨트롤을 그룹화하려면

  • WS_TABSTOP 이 컨트롤에 대한 탭을 허용하려면

예시

// pParentWnd is a pointer to the parent window.
m_myListBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_HSCROLL,
                   CRect(10, 10, 200, 200), pParentWnd, IDC_MYLISTBOX);

CListBox::DeleteItem

사용자가 소유자 그리 CListBox 기 개체에서 항목을 삭제하거나 목록 상자를 삭제할 때 프레임워크에서 호출됩니다.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

매개 변수

lpDeleteItemStruct
삭제된 항목에 대한 정보를 포함하는 Windows DELETEITEMSTRUCT 구조체에 대한 긴 포인터입니다.

설명

이 함수의 기본 구현은 아무 작업도 수행하지 않습니다. 필요에 따라 소유자 그리기 목록 상자를 다시 그리려면 이 함수를 재정의합니다.

구조에 대한 설명은 참조 CWnd::OnDeleteItem 하세요 DELETEITEMSTRUCT .

예시

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example simply frees the item's text. The list box control was created
// with the following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
   ASSERT(lpDeleteItemStruct->CtlType == ODT_LISTBOX);
   LPVOID lpszText = (LPVOID)lpDeleteItemStruct->itemData;
   ASSERT(lpszText != NULL);

   free(lpszText);

   CListBox::DeleteItem(lpDeleteItemStruct);
}

CListBox::DeleteString

목록 상자에서 위치에 nIndex 있는 항목을 삭제합니다.

int DeleteString(UINT nIndex);

매개 변수

nIndex
삭제할 문자열의 인덱스(0부터 시작)를 지정합니다.

Return Value

목록에 남아 있는 문자열의 수입니다. 반환 값은 LB_ERR 목록의 항목 수보다 큰 인덱스를 지정하는 경우 nIndex 입니다.

설명

이제 다음 nIndex 모든 항목이 한 위치 아래로 이동합니다. 예를 들어 목록 상자에 두 개의 항목이 포함된 경우 첫 번째 항목을 삭제하면 나머지 항목이 이제 첫 번째 위치에 있게 됩니다. nIndex첫 번째 위치에 있는 항목의 경우 =0입니다.

예시

// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.DeleteString(i);
}

CListBox::Dir

목록 상자에 파일 이름, 드라이브 또는 둘 다 목록을 추가합니다.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

매개 변수

attr
설명CFile::GetStatusenum 값의 조합이거나 다음 값의 조합일 수 있습니다.

의미
0x0000 파일을 읽거나 쓸 수 있습니다.
0x0001 파일은 읽을 수 있지만 쓸 수는 없습니다.
0x0002 파일이 숨겨지고 디렉터리 목록에 표시되지 않습니다.
0x0004 파일은 시스템 파일입니다.
0x0010 지정한 lpszWildCard 이름은 디렉터리를 지정합니다.
0x0020 파일이 보관되었습니다.
0x4000 에 지정된 lpszWildCard이름과 일치하는 모든 드라이브를 포함합니다.
0x8000 배타적 플래그입니다. 배타적 플래그를 설정하면 지정된 형식의 파일만 나열됩니다. 그렇지 않으면 지정된 형식의 파일이 "일반" 파일 외에 나열됩니다.

lpszWildCard
파일 사양 문자열을 가리킵니다. 문자열에는 와일드카드(예: *.*)가 포함될 수 있습니다.

Return Value

목록에 추가된 마지막 파일 이름의 인덱스(0부터 시작하는 인덱스)입니다. 반환 값은 오류가 발생하는 경우입니다 LB_ERR . 반환 값은 LB_ERRSPACE 새 문자열을 저장할 공간이 부족한 경우입니다.

예시

// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
::GetWindowsDirectory(lpszWinPath, MAX_PATH);

::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);

m_myListBox.ResetContent();
m_myListBox.Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));

::SetCurrentDirectory(lpszOldPath);

CListBox::DrawItem

소유자 그리기 목록 상자의 시각적 측면이 변경되면 프레임워크에서 호출됩니다.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

매개 변수

lpDrawItemStruct
필요한 그리기 형식에 DRAWITEMSTRUCT 대한 정보를 포함하는 구조체에 대한 긴 포인터입니다.

설명

구조체의 DRAWITEMSTRUCT 멤버 및 itemState 멤버는 itemAction 수행할 그리기 동작을 정의합니다.

기본적으로 이 멤버 함수는 아무 작업도 수행하지 않습니다. 소유자 그리 CListBox 기 개체에 대한 그리기를 구현하려면 이 멤버 함수를 재정의합니다. 애플리케이션은 이 멤버 함수가 종료되기 전에 제공 lpDrawItemStruct 된 표시 컨텍스트에 대해 선택한 모든 GDI(그래픽 디바이스 인터페이스) 개체를 복원해야 합니다.

구조에 대한 설명은 참조 CWnd::OnDrawItem 하세요 DRAWITEMSTRUCT .

예시

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example draws an item's text centered vertically and horizontally. The
// list box control was created with the following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CDC dc;

   dc.Attach(lpDrawItemStruct->hDC);

   // Save these value to restore them when done drawing.
   COLORREF crOldTextColor = dc.GetTextColor();
   COLORREF crOldBkColor = dc.GetBkColor();

   // If this item is selected, set the background color
   // and the text color to appropriate values. Also, erase
   // rect by filling it with the background color.
   if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
       (lpDrawItemStruct->itemState & ODS_SELECTED))
   {
      dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
      dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
      dc.FillSolidRect(&lpDrawItemStruct->rcItem,
                       ::GetSysColor(COLOR_HIGHLIGHT));
   }
   else
   {
      dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
   }

   // If this item has the focus, draw a red frame around the
   // item's rect.
   if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
       (lpDrawItemStruct->itemState & ODS_FOCUS))
   {
      CBrush br(RGB(255, 0, 0));
      dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
   }

   // Draw the text.
   dc.DrawText(
       lpszText,
       (int)_tcslen(lpszText),
       &lpDrawItemStruct->rcItem,
       DT_CENTER | DT_SINGLELINE | DT_VCENTER);

   // Reset the background color and the text color back to their
   // original values.
   dc.SetTextColor(crOldTextColor);
   dc.SetBkColor(crOldBkColor);

   dc.Detach();
}

CListBox::FindString

목록 상자 선택을 변경하지 않고 지정한 접두사를 포함하는 목록 상자에서 첫 번째 문자열을 찾습니다.

int FindString(
    int nStartAfter,
    LPCTSTR lpszItem) const;

매개 변수

nStartAfter
검색할 첫 번째 항목 앞에 있는 항목의 인덱스(0부터 시작)를 포함합니다. 검색이 목록 상자의 맨 아래에 도달하면 목록 상자의 맨 위에서 지정한 항목 nStartAfter까지 계속됩니다. -1이면 nStartAfter 전체 목록 상자가 처음부터 검색됩니다.

lpszItem
검색할 접두사를 포함하는 null로 끝나는 문자열을 가리킵니다. 검색은 대/소문자를 구분하므로 이 문자열에는 대문자와 소문자의 조합이 포함될 수 있습니다.

Return Value

일치하는 항목의 인덱스(0부터 시작하는 인덱스)이거나 LB_ERR 검색에 실패한 경우

설명

멤버 함수를 SelectString 사용하여 문자열을 찾고 선택합니다.

예시

// The string to match.
LPCTSTR lpszmyString = _T("item");

// Delete all items that begin with the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindString(nIndex, lpszmyString)) != LB_ERR)
{
   m_myListBox.DeleteString(nIndex);
}

CListBox::FindStringExact

에 지정된 문자열과 일치하는 첫 번째 목록 상자 문자열을 찾습니다 lpszFind.

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

매개 변수

nIndexStart
검색할 첫 번째 항목 앞에 있는 항목의 인덱스(0부터 시작)를 지정합니다. 검색이 목록 상자의 맨 아래에 도달하면 목록 상자의 맨 위에서 지정한 항목 nIndexStart까지 계속됩니다. -1이면 nIndexStart 전체 목록 상자가 처음부터 검색됩니다.

lpszFind
검색할 null로 끝나는 문자열을 가리킵니다. 이 문자열은 확장명을 포함하여 전체 파일 이름을 포함할 수 있습니다. 검색은 대/소문자를 구분하지 않으므로 문자열에는 대문자와 소문자의 조합이 포함될 수 있습니다.

Return Value

일치하는 항목의 인덱스이거나 LB_ERR 검색에 실패한 경우입니다.

설명

목록 상자가 소유자 그리기 스타일로 만들어졌지만 스타일 FindStringExactLBS_HASSTRINGS 없는 경우 멤버 함수는 doubleword 값을 값lpszFind과 일치시키려고 시도합니다.

예시

// The string to match.
LPCTSTR lpszmyString = _T("item string 3");

// Delete all items that exactly match the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindStringExact(nIndex, lpszmyString)) != LB_ERR)
{
   m_myListBox.DeleteString(nIndex);
}

CListBox::GetAnchorIndex

목록 상자에서 현재 앵커 항목의 인덱스(0부터 시작하는 인덱스)를 검색합니다.

int GetAnchorIndex() const;

Return Value

성공하면 현재 앵커 항목의 인덱스입니다. 그렇지 않으면 LB_ERR.

설명

다중 선택 목록 상자에서 앵커 항목은 연속된 선택한 항목 블록의 첫 번째 또는 마지막 항목입니다.

예시

CListBox::SetAnchorIndex에 대한 예를 참조하세요.

CListBox::GetCaretIndex

다중 선택 목록 상자에 포커스 사각형이 있는 항목의 인덱스를 결정합니다.

int GetCaretIndex() const;

Return Value

목록 상자에 포커스 사각형이 있는 항목의 인덱스(0부터 시작하는 인덱스)입니다. 목록 상자가 단일 선택 목록 상자인 경우 반환 값은 선택된 항목의 인덱스(있는 경우)입니다.

설명

항목을 선택할 수도, 선택하지 않을 수도 있습니다.

예시

CListBox::SetCaretIndex에 대한 예를 참조하세요.

CListBox::GetCount

목록 상자의 항목 수를 검색합니다.

int GetCount() const;

Return Value

목록 상자의 항목 수 또는 LB_ERR 오류가 발생하는 경우

설명

반환된 개수는 마지막 항목의 인덱스 값보다 큽니다(인덱스는 0부터 시작).

예시

// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
   str.Format(_T("item %d"), i);
   m_myListBox.AddString(str);
}

// Verify that 10 items were added to the list box.
ASSERT(m_myListBox.GetCount() == 10);

CListBox::GetCurSel

단일 선택 목록 상자에서 현재 선택한 항목의 인덱스(있는 경우)를 0부터 시작하는 인덱스를 검색합니다.

int GetCurSel() const;

Return Value

단일 선택 목록 상자인 경우 현재 선택한 항목의 인덱스(0부터 시작하는 인덱스)입니다. LB_ERR 현재 선택된 항목이 없는 경우입니다.

다중 선택 목록 상자에서 포커스가 있는 항목의 인덱스입니다.

설명

다중 선택 목록 상자를 호출 GetCurSel 하지 마세요. 대신 CListBox::GetSelItems을 사용합니다.

예시

// Select the next item of the currently selected one.
int nIndex = m_myListBox.GetCurSel();
int nCount = m_myListBox.GetCount();
if ((nIndex != LB_ERR) && (nCount > 1))
{
   if (++nIndex < nCount)
      m_myListBox.SetCurSel(nIndex);
   else
      m_myListBox.SetCurSel(0);
}

CListBox::GetHorizontalExtent

목록 상자에서 가로로 스크롤할 수 있는 너비를 픽셀 단위로 검색합니다.

int GetHorizontalExtent() const;

Return Value

목록 상자의 스크롤 가능한 너비(픽셀)입니다.

설명

목록 상자에 가로 스크롤 막대가 있는 경우에만 적용됩니다.

예시

// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
m_myListBox.ReleaseDC(pDC);

// Set the horizontal extent only if the current extent is not large enough.
if (m_myListBox.GetHorizontalExtent() < dx)
{
   m_myListBox.SetHorizontalExtent(dx);
   ASSERT(m_myListBox.GetHorizontalExtent() == dx);
}

CListBox::GetItemData

지정된 목록 상자 항목과 연결된 애플리케이션에서 제공하는 이중 단어 값을 검색합니다.

DWORD_PTR GetItemData(int nIndex) const;

매개 변수

nIndex
목록 상자에서 항목의 0부터 시작하는 인덱스를 지정합니다.

Return Value

항목과 연결된 값이거나 LB_ERR 오류가 발생하는 경우입니다.

설명

이중 단어 값은 호출의 매개 변수였습니다 dwItemData SetItemData .

예시

// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   if (m_myListBox.GetItemData(i) == 0)
   {
      m_myListBox.SetItemData(i, (DWORD)-1);
   }
}

CListBox::GetItemDataPtr

지정된 목록 상자 항목과 연결된 애플리케이션 제공 32비트 값을 포인터(void*)로 검색합니다.

void* GetItemDataPtr(int nIndex) const;

매개 변수

nIndex
목록 상자에서 항목의 0부터 시작하는 인덱스를 지정합니다.

Return Value

포인터를 검색하거나 오류가 발생하면 -1을 검색합니다.

예시

LPVOID lpmyPtr = pParentWnd;

// Check all the items in the list box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   if (m_myListBox.GetItemDataPtr(i) == lpmyPtr)
   {
      m_myListBox.SetItemDataPtr(i, NULL);
   }
}

CListBox::GetItemHeight

목록 상자에서 항목의 높이를 결정합니다.

int GetItemHeight(int nIndex) const;

매개 변수

nIndex
목록 상자에서 항목의 0부터 시작하는 인덱스를 지정합니다. 이 매개 변수는 목록 상자에 LBS_OWNERDRAWVARIABLE 스타일이 있는 경우에만 사용되며, 그렇지 않으면 0으로 설정해야 합니다.

Return Value

목록 상자에 있는 항목의 높이(픽셀)입니다. 목록 상자에 스타일이 LBS_OWNERDRAWVARIABLE 있으면 반환 값은 지정한 항목 nIndex의 높이입니다. 오류가 발생하면 반환 값은 .입니다 LB_ERR.

예시

// Set the height of every item so the item
// is completely visible.
CString str;
CSize sz;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   // Only want to set the item height if the current height
   // is not big enough.
   if (m_myListBox.GetItemHeight(i) < sz.cy)
      m_myListBox.SetItemHeight(i, sz.cy);
}
m_myListBox.ReleaseDC(pDC);

CListBox::GetItemRect

목록 상자 창에 현재 표시되어 있는 목록 상자 항목을 경계로 하는 사각형의 크기를 검색합니다.

int GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

매개 변수

nIndex
항목의 0부터 시작하는 인덱스를 지정합니다.

lpRect
항목의 목록 상자 클라이언트 좌표를 받는 구조체에 대한 긴 포인터 RECT 를 지정합니다.

Return Value

LB_ERR 오류가 발생하는 경우

예시

// Dump all of the items bounds.
CString str;
RECT r;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetItemRect(i, &r);

   str.Format(_T("item %d: left = %d, top = %d, right = %d, ")
              _T("bottom = %d\r\n"),
              i,
              r.left,
              r.top,
              r.right,
              r.bottom);
   AFXDUMP(str);
}

CListBox::GetListBoxInfo

열당 항목 수를 검색합니다.

DWORD GetListBoxInfo() const;

Return Value

개체의 열당 항목 수입니다 CListBox .

설명

이 멤버 함수는 Windows SDK에 LB_GETLISTBOXINFO 설명된 대로 메시지의 기능을 에뮬레이트합니다.

CListBox::GetLocale

목록 상자에서 사용하는 로캘을 검색합니다.

LCID GetLocale() const;

Return Value

목록 상자의 문자열에 대한 LCID(로캘 식별자) 값입니다.

설명

예를 들어 로캘은 정렬된 목록 상자에서 문자열의 정렬 순서를 결정하는 데 사용됩니다.

예시

CListBox::SetLocale에 대한 예를 참조하세요.

CListBox::GetSel

항목의 선택 상태를 검색합니다.

int GetSel(int nIndex) const;

매개 변수

nIndex
항목의 0부터 시작하는 인덱스를 지정합니다.

Return Value

지정된 항목이 선택된 경우 양수입니다. 그렇지 않으면 0입니다. 반환 값은 LB_ERR 오류가 발생하는 경우입니다.

설명

이 멤버 함수는 단일 및 다중 선택 목록 상자에서 모두 작동합니다.

현재 선택한 목록 상자 항목의 인덱스 검색하려면 .를 사용합니다 CListBox::GetCurSel.

예시

// Dump all of the items select state.
CString str;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   str.Format(_T("item %d: select state is %s\r\n"),
              i,
              m_myListBox.GetSel(i) > 0 ? _T("true") : _T("false"));
   AFXDUMP(str);
}

CListBox::GetSelCount

다중 선택 목록 상자에서 선택한 항목의 총 수를 검색합니다.

int GetSelCount() const;

Return Value

목록 상자에서 선택한 항목의 수입니다. 목록 상자가 단일 선택 목록 상자인 경우 반환 값은 .입니다 LB_ERR.

예시

CListBox::GetSelItems에 대한 예를 참조하세요.

CListBox::GetSelItems

다중 선택 목록 상자에서 선택한 항목의 항목 번호를 지정하는 정수 배열로 버퍼를 채웁니다.

int GetSelItems(
    int nMaxItems,
    LPINT rgIndex) const;

매개 변수

nMaxItems
항목 번호를 버퍼에 배치할 선택한 항목의 최대 수를 지정합니다.

rgIndex
로 지정된 nMaxItems정수 수에 충분히 큰 버퍼에 대한 포인터를 지정합니다.

Return Value

버퍼에 배치된 실제 항목 수입니다. 목록 상자가 단일 선택 목록 상자인 경우 반환 값은 .입니다 LB_ERR.

예시

// Get the indexes of all the selected items.
int nCount = m_myODListBox.GetSelCount();
CArray<int, int> aryListBoxSel;

aryListBoxSel.SetSize(nCount);
m_myODListBox.GetSelItems(nCount, aryListBoxSel.GetData());

// Dump the selection array.
AFXDUMP(aryListBoxSel);

CListBox::GetText

목록 상자에서 문자열을 가져옵니다.

int GetText(
    int nIndex,
    LPTSTR lpszBuffer) const;

void GetText(
    int nIndex,
    CString& rString) const;

매개 변수

nIndex
검색할 문자열의 인덱스(0부터 시작)를 지정합니다.

lpszBuffer
문자열을 받는 버퍼를 가리킵니다. 버퍼에는 문자열과 종료 Null 문자를 위한 충분한 공간이 있어야 합니다. 멤버 함수를 호출 GetTextLen 하여 문자열의 크기를 미리 확인할 수 있습니다.

rString
CString 개체에 대한 참조입니다.

Return Value

종결 null 문자를 제외한 문자열의 길이(바이트)입니다. 유효한 인덱스가 지정되지 않으면 nIndex 반환 값은 .입니다 LB_ERR.

설명

이 멤버 함수의 두 번째 형식은 문자열 텍스트로 CString 개체를 채웁니다.

예시

// Dump all of the items in the list box.
CString str, str2;
int n;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   n = m_myListBox.GetTextLen(i);
   m_myListBox.GetText(i, str.GetBuffer(n));
   str.ReleaseBuffer();

   str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0));
   AFXDUMP(str2);
}

CListBox::GetTextLen

목록 상자 항목의 문자열 길이를 가져옵니다.

int GetTextLen(int nIndex) const;

매개 변수

nIndex
문자열의 인덱스(0부터 시작하는 인덱스)를 지정합니다.

Return Value

종결 null 문자를 제외한 문자열의 길이(문자)입니다. 유효한 인덱스가 지정되지 않으면 nIndex 반환 값은 .입니다 LB_ERR.

예시

CListBox::GetText에 대한 예를 참조하세요.

CListBox::GetTopIndex

목록 상자에서 표시되는 첫 번째 항목의 인덱스(0부터 시작)를 검색합니다.

int GetTopIndex() const;

Return Value

성공하면 목록 상자에 표시되는 첫 번째 항목의 인덱스(0부터 시작) LB_ERR 입니다.

설명

처음에는 항목 0이 목록 상자의 맨 위에 있지만 목록 상자가 스크롤되면 다른 항목이 맨 위에 있을 수 있습니다.

예시

// Want an item in the bottom half to be the first visible item.
int n = m_myListBox.GetCount() / 2;
if (m_myListBox.GetTopIndex() < n)
{
   m_myListBox.SetTopIndex(n);
   ASSERT(m_myListBox.GetTopIndex() == n);
}

CListBox::InitStorage

목록 상자 항목을 저장하기 위한 메모리를 할당합니다.

int InitStorage(
    int nItems,
    UINT nBytes);

매개 변수

nItems
추가할 항목 수를 지정합니다.

nBytes
항목 문자열에 할당할 메모리 양(바이트)을 지정합니다.

Return Value

성공하면 메모리 재할당이 필요하기 전에 목록 상자에 저장할 수 있는 최대 항목 수가고, 그렇지 않으면 LB_ERRSPACE메모리를 충분히 사용할 수 없습니다.

설명

에 많은 수의 항목을 추가하기 전에 이 함수를 CListBox호출합니다.

이 함수는 많은 수의 항목(100개 이상)이 있는 목록 상자의 초기화를 가속화하는 데 도움이 됩니다. 지정된 양의 메모리를 미리 할당하여 후속 AddStringInsertStringDir 함수가 가능한 가장 짧은 시간이 소요되도록 합니다. 매개 변수에 대한 예상치를 사용할 수 있습니다. 과대 평가하면 일부 추가 메모리가 할당됩니다. 과소 평가하면 미리 할당된 양을 초과하는 항목에 대해 일반 할당이 사용됩니다.

Windows 95/98에만 해당: nItems 매개 변수는 16비트 값으로 제한됩니다. 즉, 목록 상자에는 최대 32,767개 항목까지 포함할 수 있습니다. 항목 수가 제한되어 있지만 목록 상자에 있는 항목의 총 크기는 사용 가능한 메모리에 의해서만 제한됩니다.

예시

// Initialize the storage of the list box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = m_myListBox.InitStorage(256, 16 * sizeof(TCHAR));
ASSERT(n != LB_ERRSPACE);

// Add 256 items to the list box.
CString str;
for (int i = 0; i < 256; i++)
{
   str.Format(_T("item string %d"), i);
   m_myListBox.AddString(str);
}

CListBox::InsertString

목록 상자에 문자열을 삽입합니다.

int InsertString(
    int nIndex,
    LPCTSTR lpszItem);

매개 변수

nIndex
문자열을 삽입할 위치의 인덱스(0부터 시작하는 인덱스)를 지정합니다. 이 매개 변수가 -1이면 문자열이 목록의 끝에 추가됩니다.

lpszItem
삽입할 null 종료 문자열을 가리킵니다.

Return Value

문자열이 삽입된 위치의 0부터 시작하는 인덱스입니다. 반환 값은 LB_ERR 오류가 발생하는 경우입니다. 반환 값은 새 문자열을 저장할 공간이 부족한 경우입니다 LB_ERRSPACE .

설명

멤버 함수 InsertStringAddString LBS_SORT 달리 스타일이 있는 목록은 정렬되지 않습니다.

예시

// Insert items in between existing items.
CString str;
int n = m_myListBox.GetCount();
for (int i = 0; i < n; i++)
{
   str.Format(_T("item string %c"), (char)('A' + i));
   m_myListBox.InsertString(2 * i, str);
}

CListBox::ItemFromPoint

에 지정된 지점과 가장 가까운 목록 상자 항목을 결정합니다 pt.

UINT ItemFromPoint(
    CPoint pt,
    BOOL& bOutside) const;

매개 변수

pt
목록 상자의 클라이언트 영역의 왼쪽 위 모서리를 기준으로 지정된 가장 가까운 항목을 찾을 지점입니다.

bOutside
목록 상자의 BOOL 클라이언트 영역 내에 있는 경우 pt 목록 상자 FALSE 의 클라이언트 영역 외부에 있는 경우 pt 로 설정 TRUE 되는 변수에 대한 참조입니다.

Return Value

에 지정된 지점에 가장 가까운 항목의 인덱스입니다 pt.

설명

이 함수를 사용하여 마우스 커서가 이동하는 목록 상자 항목을 확인할 수 있습니다.

예시

CListBox::SetAnchorIndex에 대한 예를 참조하세요.

CListBox::MeasureItem

소유자 그리기 스타일이 있는 목록 상자가 만들어지면 프레임워크에서 호출됩니다.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

매개 변수

lpMeasureItemStruct
구조체에 대한 긴 포인터입니다 MEASUREITEMSTRUCT .

설명

기본적으로 이 멤버 함수는 아무 작업도 수행하지 않습니다. 이 멤버 함수를 재정의하고 구조를 입력하여 Windows에 MEASUREITEMSTRUCT 목록 상자 차원을 알립니다. 스타일이 포함된 목록 상자가 만들어 LBS_OWNERDRAWVARIABLE 지면 프레임워크는 목록 상자의 각 항목에 대해 이 멤버 함수를 호출합니다. 그렇지 않으면 이 멤버는 한 번만 호출됩니다.

멤버 함수로 SubclassDlgItem 만든 소유자 그리기 목록 상자에서 스타일을 사용하는 LBS_OWNERDRAWFIXED 방법에 대한 자세한 내용은 Technical Note 14CWnd설명을 참조하세요.

구조에 대한 설명은 참조 CWnd::OnMeasureItem 하세요 MEASUREITEMSTRUCT .

예시

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CSize sz;
   CDC *pDC = GetDC();

   sz = pDC->GetTextExtent(lpszText);

   ReleaseDC(pDC);

   lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}

CListBox::ResetContent

목록 상자에서 모든 항목을 제거합니다.

void ResetContent();

예시

// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);

CListBox::SelectString

지정된 문자열과 일치하는 목록 상자 항목을 검색하고 일치하는 항목이 있으면 항목을 선택합니다.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszItem);

매개 변수

nStartAfter
검색할 첫 번째 항목 앞에 있는 항목의 인덱스(0부터 시작)를 포함합니다. 검색이 목록 상자의 맨 아래에 도달하면 목록 상자의 맨 위에서 지정한 항목 nStartAfter까지 계속됩니다. -1이면 nStartAfter 전체 목록 상자가 처음부터 검색됩니다.

lpszItem
검색할 접두사를 포함하는 null로 끝나는 문자열을 가리킵니다. 검색은 대/소문자를 구분하므로 이 문자열에는 대문자와 소문자의 조합이 포함될 수 있습니다.

Return Value

검색에 성공한 경우 선택한 항목의 인덱스입니다. 검색에 실패한 경우 반환 값은 LB_ERR 현재 선택 영역이 변경되지 않습니다.

설명

필요한 경우 목록 상자를 스크롤하여 선택한 항목을 볼 수 있습니다.

이 멤버 함수는 LBS_MULTIPLESEL 스타일이 있는 목록 상자와 함께 사용할 수 없습니다.

항목은 시작점의 초기 문자가 지정한 문자열의 문자와 일치하는 경우에만 선택됩니다 lpszItem.

멤버 함수를 FindString 사용하여 항목을 선택하지 않고 문자열을 찾습니다.

예시

// The string to match.
LPCTSTR lpszmyString = _T("item 5");

// Select the item that begins with the specified string.
int nIndex = m_myListBox.SelectString(0, lpszmyString);
ASSERT(nIndex != LB_ERR);

CListBox::SelItemRange

다중 선택 목록 상자에서 여러 개의 연속 항목을 선택합니다.

int SelItemRange(
    BOOL bSelect,
    int nFirstItem,
    int nLastItem);

매개 변수

bSelect
선택 항목을 설정하는 방법을 지정합니다. 이 TRUE경우 bSelect 문자열이 선택되고 강조 표시됩니다. 이 경우 FALSE강조 표시가 제거되고 문자열이 더 이상 선택되지 않습니다.

nFirstItem
설정할 첫 번째 항목의 인덱스(0부터 시작)를 지정합니다.

nLastItem
설정할 마지막 항목의 인덱스(0부터 시작하는 인덱스)를 지정합니다.

Return Value

LB_ERR 오류가 발생하는 경우

설명

다중 선택 목록 상자에서만 이 멤버 함수를 사용합니다. 다중 선택 목록 상자에서 항목 하나만 선택해야 하는 경우, 즉 같은 경우 nFirstItem 멤버 함수를 대신 호출 SetSel 합니다 nLastItem .

예시

// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);

CListBox::SetAnchorIndex

다중 선택 목록 상자의 앵커를 설정하여 확장된 선택을 시작합니다.

void SetAnchorIndex(int nIndex);

매개 변수

nIndex
앵커가 될 목록 상자 항목의 인덱스(0부터 시작)를 지정합니다.

설명

다중 선택 목록 상자에서 앵커 항목은 연속된 선택한 항목 블록의 첫 번째 또는 마지막 항목입니다.

예시

void CMyODListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
   BOOL bOutside = TRUE;
   UINT uItem = ItemFromPoint(point, bOutside);

   if (!bOutside)
   {
      // Set the anchor to be the middle item.
      SetAnchorIndex(uItem);
      ASSERT((UINT)GetAnchorIndex() == uItem);
   }

   CListBox::OnLButtonDown(nFlags, point);
}

CListBox::SetCaretIndex

포커스 사각형을 다중 선택 목록 상자에 지정된 인덱스 항목으로 설정합니다.

int SetCaretIndex(
    int nIndex,
    BOOL bScroll = TRUE);

매개 변수

nIndex
목록 상자에서 포커스 사각형을 받을 항목의 인덱스(0부터 시작하는 인덱스)를 지정합니다.

bScroll
이 값이 0이면 항목이 완전히 표시될 때까지 스크롤됩니다. 이 값이 0이 아니면 항목이 적어도 부분적으로 표시될 때까지 스크롤됩니다.

Return Value

LB_ERR 오류가 발생하는 경우

설명

항목이 표시되지 않으면 보기로 스크롤됩니다.

예시

// Set the caret to be the middle item.
m_myListBox.SetCaretIndex(m_myListBox.GetCount() / 2);
ASSERT(m_myListBox.GetCaretIndex() == m_myListBox.GetCount() / 2);

CListBox::SetColumnWidth

여러 열 목록 상자에서 모든 열의 너비를 픽셀 단위로 설정합니다(스타일을 사용하여 LBS_MULTICOLUMN 생성됨).

void SetColumnWidth(int cxWidth);

매개 변수

cxWidth
모든 열의 너비를 픽셀 단위로 지정합니다.

예시

// Find the pixel width of the largest item.
CString str;
CSize   sz;
int     dx = 0;
CDC* pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
myListBox.ReleaseDC(pDC);

// Set the column width of the first column to be one and 1/3 units
// of the largest string. 
myListBox.SetColumnWidth(dx * 4 / 3);

CListBox::SetCurSel

문자열을 선택하고 필요한 경우 보기로 스크롤합니다.

int SetCurSel(int nSelect);

매개 변수

nSelect
선택할 문자열의 인덱스(0부터 시작)를 지정합니다. -1이면 nSelect 목록 상자에 선택 항목이 없도록 설정됩니다.

Return Value

LB_ERR 오류가 발생하는 경우

설명

새 문자열이 선택되면 목록 상자는 이전에 선택한 문자열에서 강조 표시를 제거합니다.

단일 선택 목록 상자에서만 이 멤버 함수를 사용합니다.

다중 선택 목록 상자에서 선택 영역을 설정하거나 제거하려면 .를 사용합니다 CListBox::SetSel.

예시

// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
   m_myListBox.SetCurSel(nCount - 1);

CListBox::SetHorizontalExtent

목록 상자를 가로로 스크롤할 수 있는 너비를 픽셀 단위로 설정합니다.

void SetHorizontalExtent(int cxExtent);

매개 변수

cxExtent
목록 상자를 가로로 스크롤할 수 있는 픽셀 수를 지정합니다.

설명

목록 상자의 크기가 이 값보다 작으면 가로 스크롤 막대가 목록 상자의 항목을 가로로 스크롤합니다. 목록 상자가 이 값보다 크거나 크면 가로 스크롤 막대가 숨겨집니다.

호출 SetHorizontalExtent에 응답하려면 목록 상자가 스타일로 정의 WS_HSCROLL 되어 있어야 합니다.

이 멤버 함수는 여러 열 목록 상자에는 유용하지 않습니다. 다중 열 목록 상자의 경우 멤버 함수를 호출합니다 SetColumnWidth .

예시

// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_myListBox.GetDC();
CFont *pFont = m_myListBox.GetFont();

// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);

for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   // Add the avg width to prevent clipping
   sz.cx += tm.tmAveCharWidth;

   if (sz.cx > dx)
      dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_myListBox.ReleaseDC(pDC);

// Set the horizontal extent so every character of all strings
// can be scrolled to.
m_myListBox.SetHorizontalExtent(dx);

CListBox::SetItemData

목록 상자에서 지정된 항목과 연결된 값을 설정합니다.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

매개 변수

nIndex
항목의 0부터 시작하는 인덱스를 지정합니다.

dwItemData
항목과 연결할 값을 지정합니다.

Return Value

LB_ERR 오류가 발생하는 경우

예시

// Set the data of each item to be equal to its index.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.SetItemData(i, i);
}

CListBox::SetItemDataPtr

목록 상자에서 지정한 항목과 연결된 32비트 값을 지정된 포인터( void *)로 설정합니다.

int SetItemDataPtr(
    int nIndex,
    void* pData);

매개 변수

nIndex
항목의 0부터 시작하는 인덱스를 지정합니다.

pData
항목과 연결할 포인터를 지정합니다.

Return Value

LB_ERR 오류가 발생하는 경우

설명

항목이 추가되거나 제거될 때 목록 상자 내 항목의 상대 위치가 변경될 수 있더라도 이 포인터는 목록 상자의 수명 동안 유효합니다. 따라서 상자 내의 항목 인덱스가 변경 될 수 있지만 포인터는 신뢰할 수 있습니다.

예시

// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.SetItemDataPtr(i, NULL);
}

CListBox::SetItemHeight

목록 상자에 있는 항목의 높이를 설정합니다.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

매개 변수

nIndex
목록 상자에서 항목의 0부터 시작하는 인덱스를 지정합니다. 이 매개 변수는 목록 상자에 LBS_OWNERDRAWVARIABLE 스타일이 있는 경우에만 사용되며, 그렇지 않으면 0으로 설정해야 합니다.

cyItemHeight
항목의 높이를 픽셀 단위로 지정합니다.

Return Value

LB_ERR 인덱스 또는 높이가 잘못된 경우

설명

목록 상자에 스타일이 LBS_OWNERDRAWVARIABLE 있으면 이 함수는 지정한 항목 nIndex의 높이를 설정합니다. 그렇지 않으면 이 함수는 목록 상자에 있는 모든 항목의 높이를 설정합니다.

예시

// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   myListBox.SetItemHeight(i, sz.cy);
}
myListBox.ReleaseDC(pDC);

CListBox::SetLocale

이 목록 상자의 로캘 식별자를 설정합니다.

LCID SetLocale(LCID nNewLocale);

매개 변수

nNewLocale
목록 상자에 대해 설정할 새 LCID(로캘 식별자) 값입니다.

Return Value

이 목록 상자의 이전 LCID(로캘 식별자) 값입니다.

설명

SetLocale 호출되지 않으면 시스템에서 기본 로캘을 가져옵니다. 이 시스템 기본 로캘은 제어판 지역(또는 국제) 애플리케이션을 사용하여 수정할 수 있습니다.

예시

// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
                       SORT_DEFAULT);

// Force the list box to use my locale.
m_myListBox.SetLocale(mylcid);
ASSERT(m_myListBox.GetLocale() == mylcid);

CListBox::SetSel

다중 선택 목록 상자에서 문자열을 선택합니다.

int SetSel(
    int nIndex,
    BOOL bSelect = TRUE);

매개 변수

nIndex
설정할 문자열의 인덱스(0부터 시작)를 포함합니다. -1이면 값에 따라 선택 영역이 모든 문자열에 bSelect추가되거나 제거됩니다.

bSelect
선택 항목을 설정하는 방법을 지정합니다. 이 TRUE경우 bSelect 문자열이 선택되고 강조 표시됩니다. 이 경우 FALSE강조 표시가 제거되고 문자열이 더 이상 선택되지 않습니다. 지정된 문자열이 선택되고 기본적으로 강조 표시됩니다.

Return Value

LB_ERR 오류가 발생하는 경우

설명

다중 선택 목록 상자에서만 이 멤버 함수를 사용합니다.

단일 선택 목록 상자에서 항목을 선택하려면 .를 사용합니다 CListBox::SetCurSel.

예시

// Select all of the items with an even index and
// deselect all others.
for (int i = 0; i < m_myODListBox.GetCount(); i++)
{
   m_myODListBox.SetSel(i, ((i % 2) == 0));
}

CListBox::SetTabStops

목록 상자에서 탭 중지 위치를 설정합니다.

void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);

BOOL SetTabStops(
    int nTabStops,
    LPINT rgTabStops);

매개 변수

cxEachStop
탭 정지는 모든 cxEachStop 대화 상자 단위에서 설정됩니다. 대화 상자에 대한 설명은 참조 rgTabStops 하세요.

nTabStops
목록 상자에 포함할 탭 중지 횟수를 지정합니다.

rgTabStops
대화 상자 단위의 탭 중지 위치를 포함하는 정수 배열의 첫 번째 멤버를 가리킵니다. 대화 상자 단위는 가로 또는 세로 거리입니다. 가로 대화 상자 단위 1개는 현재 대화 상자 기본 너비 단위의 1/4와 같고 세로 대화 상자 단위는 현재 대화 상자 기본 높이 단위의 1/8과 같습니다. 대화 상자 기본 단위는 현재 시스템 글꼴의 높이와 너비를 기준으로 계산됩니다. Windows 함수는 GetDialogBaseUnits 현재 대화 상자 기본 단위를 픽셀 단위로 반환합니다. 탭 정지는 순서대로 정렬되어야 합니다. 뒤로 탭은 허용되지 않습니다.

Return Value

모든 탭이 설정된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

탭 정지를 기본 크기 2 대화 상자 단위로 설정하려면 이 멤버 함수의 매개 변수가 없는 버전을 호출합니다. 탭 정지를 2 이외의 크기로 설정하려면 인수를 사용하여 버전을 호출합니다 cxEachStop .

탭 정지를 크기 배열로 설정하려면 버전과 nTabStops 인수를 rgTabStops 사용합니다. 탭 정지는 각 값에 rgTabStops대해 설정되며, 이 값은 지정한 수 nTabStops까지 설정됩니다.

멤버 함수에 대한 호출에 SetTabStops 응답하려면 스타일이 포함된 목록 상자가 만들어졌 LBS_USETABSTOPS 어야 합니다.

예시

// Find the pixel width of the largest first substring.
CString str;
CSize sz;
int nIndex, dx = 0;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);

   if ((nIndex = str.Find('\t')) != -1)
      str = str.Right(nIndex);

   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
myListBox.ReleaseDC(pDC);

// Set tab stops at every one and 1/3 units
// of the largest string.
// NOTE: Convert pixels to dialog units.
myListBox.SetTabStops((dx * 4 / 3 * 4) / LOWORD(::GetDialogBaseUnits()));

CListBox::SetTopIndex

특정 목록 상자 항목이 표시되는지 확인합니다.

int SetTopIndex(int nIndex);

매개 변수

nIndex
목록 상자 항목의 인덱스(0부터 시작하는 인덱스)를 지정합니다.

Return Value

성공하거나 LB_ERR 오류가 발생하는 경우 0입니다.

설명

시스템에서 지정 nIndex 한 항목이 목록 상자의 맨 위에 표시되거나 최대 스크롤 범위에 도달할 때까지 목록 상자를 스크롤합니다.

예시

// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);

CListBox::VKeyToItem

목록 상자의 부모 창이 목록 상자에서 메시지를 받을 때 프레임워크에서 호출됩니다 WM_VKEYTOITEM .

virtual int VKeyToItem(
    UINT nKey,
    UINT nIndex);

매개 변수

nKey
사용자가 누른 키의 가상 키 코드입니다. 표준 가상 키 코드 목록은 Winuser.h

nIndex
list-box caret의 현재 위치입니다.

Return Value

추가 작업이 없는 경우 - 2, 기본 작업의 경우 1 또는 키 입력에 대한 기본 작업을 수행할 목록 상자 항목의 인덱스 지정을 위한 음수가 아닌 값을 반환합니다.

설명

메시지는 WM_VKEYTOITEM 메시지를 받을 때 목록 상자에서 WM_KEYDOWN 전송되지만 목록 상자가 다음 두 가지를 모두 충족하는 경우에만 전송됩니다.

이 함수를 직접 호출해서는 안 됩니다. 키보드 메시지의 사용자 지정 처리를 제공하도록 이 함수를 재정의합니다.

재정의가 수행한 작업을 프레임워크에 알리려면 값을 반환해야 합니다. 반환 값 - 2는 애플리케이션이 항목 선택의 모든 측면을 처리했으며 목록 상자에서 추가 작업이 필요하지 않음을 나타냅니다. 반환하기 전에 - 2, 당신은 선택을 설정하거나 캐리트 또는 둘 다를 이동할 수 있습니다. 선택 항목을 설정하려면 사용 SetCurSel 하거나 SetSel. 캐리트를 이동하려면 .를 사용합니다 SetCaretIndex.

반환 값 - 1은 키 입력에 대한 응답으로 목록 상자가 기본 작업을 수행해야 함을 나타냅니다. 기본 구현은 - 1을 반환합니다.

반환 값이 0 이상인 경우 목록 상자에서 항목의 인덱스를 지정하고 목록 상자가 지정된 항목의 키 입력에 대한 기본 작업을 수행해야 함을 나타냅니다.

예시

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
   // On key up, move the caret up one item.
   if ((nKey == VK_UP) && (nIndex > 0))
   {
      SetCaretIndex(nIndex - 1);
   }
   // On key down, move the caret down one item.
   else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
   {
      SetCaretIndex(nIndex + 1);
   }

   // Do not perform any default processing.
   return -2;
}

참고 항목

MFC 샘플 CTRLTEST
CWnd 클래스
계층 구조 차트
CWnd 클래스
CButton 클래스
CComboBox 클래스
CEdit 클래스
CScrollBar 클래스
CStatic 클래스