Udostępnij za pośrednictwem


Wirtualne formanty listy

Formant listy wirtualnej jest formantu widoku listy, który ma LVS_OWNERDATA styl.Styl ten umożliwia kontrolę do obsługi liczba elementów do DWORD (domyślna liczba elementów tylko rozszerza się na int).Jednak Największą zaletą dostarczonych przez ten styl jest możliwość tylko podzbiór elementów danych w pamięci w dowolnym momencie.Dzięki temu formantu widoku listy wirtualnej się, nadaje się do użytku z dużymi bazami danych informacji, gdzie szczegółowe metody uzyskiwania dostępu do danych są już stosowane.

[!UWAGA]

Ponadto, aby zapewnić funkcjonalność listy wirtualnej w CListCtrl, MFC również udostępnia taką samą funkcjonalność w klasy CListView klasy.

Istnieją pewne problemy ze zgodnością, jednak należy pamiętać podczas tworzenia formantów listy wirtualnej.Aby uzyskać więcej informacji, zobacz sekcję problemy ze zgodnością w temacie widok listy formantów w Windows SDK.

Obsługa powiadomienie LVN_GETDISPINFO

Formanty listy wirtualnej Obsługa bardzo mało informacji o towarze.Z wyjątkiem wybór towaru i informacje fokus wszystkie informacje o przedmiocie jest zarządzany przez właściciela formantu.Zażądane przez architekturę via LVN_GETDISPINFO komunikat z powiadomieniem.Aby wprowadzić wymagane informacje, właściciela formantu listy wirtualnej (lub samego formantu) musi obsługiwać tego powiadomienia.Można to łatwo zrobić za pomocą okna właściwości (zobacz Mapowania wiadomości do funkcji).Wynikowy kod powinien wyglądać jak w następującym przykładzie (gdzie CMyDialog jest właścicielem obiektu formantu listy wirtualnej i okna dialogowego jest obsługa powiadomienia):

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

W obsłudze dla LVN_GETDISPINFO komunikat z powiadomieniem, trzeba sprawdzić, jakiego typu informacje są żądane.Możliwe wartości to:

  • LVIF_TEXTpszText Członkowskich musi być wypełnione.

  • LVIF_IMAGEiImage Członkowskich musi być wypełnione.

  • LVIF_INDENTiIndent Członkowskich musi być wypełnione.

  • LVIF_PARAMFikcyjnymi Członkowskich musi być wypełnione. (Nie przedstawienia podelementów.)

  • LVIF_STATEPaństwo Członkowskich musi być wypełnione.

Następnie należy podać wszelkich informacji, jakie wnosi się powrotem do ramy.

Poniższy przykład (zaczerpnięte z treści programu obsługi powiadomień obiekt formantu listy) przedstawia jedną z możliwych metod poprzez dostarczanie informacji dla buforów tekst i zdjęcie przedmiotu:

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;
}

Formanty List buforowania i wirtualnych

Ponieważ ten typ formantu listy jest przeznaczony dla dużych zestawów danych, zaleca się pamięci podręcznej danych żądanego elementu, aby poprawić wydajność pobierania.Środowisko framework zapewnia mechanizm podpowiedzi do pamięci podręcznej, aby pomóc w optymalizacji pamięci podręcznej przez wysłanie LVN_ODCACHEHINT komunikat z powiadomieniem.

Poniższy przykład aktualizuje pamięć podręczną z zakresu przekazany do funkcji obsługi.

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;
}

Aby uzyskać więcej informacji na przygotowanie i utrzymywanie pamięci podręcznej, zobacz sekcję zarządzania pamięcią podręczną tematu widoku listy formantów w Windows SDK.

Znajdowanie określonych towarów

LVN_ODFINDITEM komunikat z powiadomieniem jest wysyłane przez formant listy wirtualnej tego konkretnego elementu sterowania musi być znalezione.Komunikat z powiadomieniem jest wysyłany po otrzymaniu formantu widoku listy szybkiego dostępu do klucza lub po otrzymaniu LVM_FINDITEM wiadomości.Wyszukaj informacje są wysyłane w postaci LVFINDINFO strukturę, która jest elementem z NMLVFINDITEM struktury.Obsłużyć tego komunikatu przez zastąpienie OnChildNotify funkcja listy kontroli obiektu i wewnątrz ciała obsługi, sprawdź LVN_ODFINDITEM wiadomości.Jeśli znalezione, wykonaj odpowiednią akcję.

Należy być przygotowanym do wyszukiwania przedmiot, który odpowiada informacje podane przez formant w widoku listy.Indeks elementu, jeśli kończy się pomyślnie, lub -1 powinien powrócić, jeśli stwierdzono brak pasujących elementów.

Zobacz też

Informacje

Korzystanie z CListCtrl

Koncepcje

Formanty (MFC)