다음을 통해 공유


가상 List 컨트롤

가상 list 컨트롤에 있는 목록 뷰 컨트롤 되는 LVS_OWNERDATA 스타일입니다.이 스타일 컨트롤 최대 항목 수를 지원할 수 있도록는 DWORD (기본 항목 수만 확장은 int).그러나이 스타일의 가장 큰 장점은 데이터 항목의 하위 집합을 한 번에 메모리에만 할 수 있습니다.이 정보를 큰 데이터베이스에서 사용할 자체를 살렸습니다 가상 목록 뷰 컨트롤을의 데이터에 액세스 하는 특정 메서드가 이미 설정 되어 있습니다.

[!참고]

가상 list 기능에서 제공 하는 것 외에 CListCtrl, MFC에도 동일한 기능을 제공는 CListView 클래스입니다.

가상 list 컨트롤을 개발할 때 알아 두어야 할 몇 가지 호환성 문제가 있습니다.자세한 내용은 호환성 문제 섹션에서는 목록 뷰 컨트롤 항목의의 Windows SDK.

LVN_GETDISPINFO 알림 메시지 처리

가상 list 컨트롤 항목 정보를 거의 유지합니다.항목 선택 및 포커스 정보를 제외 하 고 모든 항목 정보 컨트롤의 소유자에 의해 관리 됩니다.프레임 워크를 통해 정보 요청은 LVN_GETDISPINFO 알림 메시지입니다.요청한 정보를 제공 하려면 가상 list 컨트롤 (또는 해당 컨트롤)의 소유자가 알림이 메시지를 처리 해야 합니다.이 쉽게 수행할 수 있습니다 속성 창에서 (참조 함수에 메시지 매핑).결과 코드는 다음 예제에서는 비슷합니다 (위치 CMyDialog 가상 list 컨트롤 개체를 소유 하 고 알림 대화 상자를 처리 하는):

ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST3, &CMyDialog::OnLvnGetdispinfoList3)

처리기에 대 한의 LVN_GETDISPINFO 어떤 유형의 정보를 요청 합니다 확인 해야 알림 메시지를 사용 합니다.가능한 값은 다음과 같습니다.

  • LVIF_TEXTpszText 멤버에서 입력 해야 합니다.

  • LVIF_IMAGEiImage 멤버에서 입력 해야 합니다.

  • LVIF_INDENTiIndent 멤버에서 입력 해야 합니다.

  • LVIF_PARAMLParam 멤버에서 입력 해야 합니다.(대 한 하위 항목이 없습니다.)

  • LVIF_STATE상태 멤버에서 입력 해야 합니다.

그런 다음 프레임 워크를 다시 요청 된 모든 정보를 제공 해야 합니다.

(List 컨트롤 개체에 대 한 알림 처리기의 본문에서 찍은) 다음 예제에서는 항목의 이미지와 텍스트 버퍼의 정보를 제공 하 여 여러 가능한 메서드를 보여 줍니다.

NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
LV_ITEM* pItem = &(pDispInfo)->item;

int iItem = pItem->iItem;

if (pItem->mask & LVIF_TEXT) //valid text buffer?
{
   switch(pItem->iSubItem)
   {
      case 0: //fill in main text
         _tcscpy_s(pItem->pszText, pItem->cchTextMax,
            m_Items[iItem].m_strItemText);
         break;
      case 1: //fill in sub item 1 text
         _tcscpy_s(pItem->pszText, pItem->cchTextMax,
            m_Items[iItem].m_strSubItem1Text);
         break;
      case 2: //fill in sub item 2 text
         _tcscpy_s(pItem->pszText, pItem->cchTextMax,
            m_Items[iItem].m_strSubItem2Text);
         break;
   }
}

if (pItem->mask & LVIF_IMAGE) //valid image?
{
   pItem->iImage = m_Items[iItem].m_iImage;
}

캐싱 및 가상 List 컨트롤

큰 데이터 집합에 대 한 이런이 종류의 list 컨트롤 이므로 요청 된 항목 데이터 검색 성능 향상을 위해 캐시 하는 것이 좋습니다.캐시 전송 하 여 최적화 하는 캐시 힌트 메커니즘을 제공 하는 프레임 워크는 LVN_ODCACHEHINT 알림 메시지입니다.

다음 예제에서는 처리기 함수에 전달 된 범위에는 캐시를 업데이트 합니다.

void CMyDialog::OnLvnOdcachehintList3(NMHDR *pNMHDR, LRESULT *pResult)
{
   LPNMLVCACHEHINT pCacheHint = reinterpret_cast<LPNMLVCACHEHINT>(pNMHDR);

   // Update the cache with the recommended range.
   for (int i = pCacheHint->iFrom; i <= pCacheHint->iTo; i++)
   {
      m_Items[i].m_iImage = i % 2;
      m_Items[i].m_strItemText.Format(_T("Item %d"), i);
      m_Items[i].m_strSubItem1Text = _T("Sub 1");
      m_Items[i].m_strSubItem2Text = _T("Sub 2");
   }

   *pResult = 0;
}

준비 및 캐시를 유지 관리에 대 한 자세한 내용은 캐시 관리 섹션에서 항목 목록 뷰 컨트롤의 참조는 Windows SDK.

특정 항목 찾기

LVN_ODFINDITEM 알림 메시지 가상 list 컨트롤에서 보내는 특정 목록 컨트롤의 항목을 찾을 수 할 때.List view 컨트롤 키 빠른 액세스를 받았을 때 또는를 받을 때 알림 메시지를 보내는 LVM_FINDITEM 메시지입니다.정보 검색의 형태로 전송 되는 LVFINDINFO 구조 구성원 인의 NMLVFINDITEM 구조.재정의 하 여이 메시지를 처리는 OnChildNotify 함수 목록 개체를 제어 하 고 처리기의 본문 내부에 대 한 확인은 LVN_ODFINDITEM 메시지.경우 찾을, 적절 한 조치를 수행 합니다.

List view 컨트롤에서 제공한 정보에 일치 하는 항목을 검색할 수 있도록 준비 해야 합니다.일치 하는 항목이 있으면 항목 성공할 경우,-1의 인덱스를 반환 해야 합니다.

참고 항목

참조

CListCtrl 사용

개념

컨트롤 (MFC)