Wirtualny formantów listy
Formant listy wirtualnych jest formantu widoku listy, który ma LVS_OWNERDATA styl.Styl ten umożliwia kontrolę do obsługi liczba elementów do DWORD (liczba elementów domyślne rozciąga się tylko do int).Największą zaletą dostarczane przez ten styl jest jednak możliwość tylko podzbiór elementów danych w pamięci w dowolnym momencie.Dzięki temu formantu widoku listy wirtualnych udzielać sobie do użycia z dużych baz danych, informacji, gdzie szczególnych metod uzyskiwania dostępu do danych są już stosowane.
[!UWAGA]
Oprócz funkcji listy wirtualnych w CListCtrl, MFC również udostępnia taką samą funkcjonalność w CListView klasy.
Istnieją pewne problemy ze zgodnością, należy pamiętać podczas rozwijania formantów listy wirtualnych.Aby uzyskać więcej informacji, zobacz sekcję problemy ze zgodnością tematu formantów w widoku listy w Windows SDK.
Obsługa powiadomienie LVN_GETDISPINFO
Formanty listy wirtualnych utrzymać bardzo niewiele informacji elementu.Wybór przedmiotu i informacje fokus wszystkie informacje elementu jest zarządzany przez właściciela formantu.Zażądane przez ramy via LVN_GETDISPINFO komunikat z powiadomieniem.Udostępnienia żądanej informacji, właściciela formantu listy wirtualnych (lub samego formantu) musi obsługiwać tego powiadomienia.Łatwo można to zrobić za pomocą okna właściwości (zobacz Mapowanie 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 wirtualnych i okno dialogowe jest obsługa powiadomienia):
ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST3, &CMyDialog::OnLvnGetdispinfoList3)
W obsłudze dla LVN_GETDISPINFO komunikat z powiadomieniem, należy sprawdzić wyświetlić żądanego typ informacji.Możliwe wartości to:
LVIF_TEXTpszText Członkowskich musi zostać wypełnione.
LVIF_IMAGEiImage Członkowskich musi zostać wypełnione.
LVIF_INDENTiIndent Członkowskich musi zostać wypełnione.
LVIF_PARAMLParam Członkowskich musi zostać wypełnione.(Nie stanowią dla podpozycje.)
LVIF_STATEPaństwo Członkowskich musi zostać wypełnione.
Należy następnie dostaw, niezależnie od informacji jest wymagane do ramy.
Poniższy przykład (podjęte z ciała obsługi powiadomień dla obiektu formantu listy) ilustruje jednej metody możliwe poprzez dostarczanie informacji dla buforów tekst i obraz elementu:
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 listy buforowania i wirtualnych
Ponieważ tego typu formantu listy jest przeznaczony dla dużych zestawów danych, zaleca się pamięci podręcznej danych żądanego elementu, aby poprawić wydajność pobierania.Ramy oferuje mechanizm podpowiedzi w pamięci podręcznej w optymalizacji pamięci podręcznej przez wysłanie LVN_ODCACHEHINT komunikat z powiadomieniem.
Poniższy przykład aktualizuje zakres przekazanych do funkcji obsługi pamięci podręcznej.
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 formantów w widoku listy w Windows SDK.
Znajdowanie określonych elementów
LVN_ODFINDITEM komunikat z powiadomieniem jest wysyłane przez formant listy wirtualnych tego konkretnego elementu sterowania musi być znalezione.Komunikat z powiadomieniem jest wysyłany, gdy formant w widoku listy otrzymuje szybki dostęp do klucza lub po odebraniu LVM_FINDITEM wiadomości.Wyszukaj informacje są wysyłane w postaci LVFINDINFO strukturę, której członkiem jest z NMLVFINDITEM struktury.Uchwyt ten komunikat nadrzędnym OnChildNotify funkcji listy kontroli obiektu i wewnątrz ciała program obsługi, sprawdzanie LVN_ODFINDITEM wiadomości.Jeśli znaleziono, wykonaj odpowiednie działania.
Należy być przygotowanym do wyszukiwania przedmiot, który odpowiada informacje podane przez formant w widoku listy.Jeśli zostanie znaleziony żaden element nie pasujące, powinna zwrócić indeksu elementu, jeśli kończy się pomyślnie lub wartość -1.