Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Microsoft Foundation Sınıfları (MFC) kitaplığına destek verilmeye devam ediliyor. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.
Sanal liste denetimi, LVS_OWNERDATA stiline sahip bir liste görünümü denetimidir. Bu stil, denetimin bir DWORD'e kadar öğe sayısını desteklemesini sağlar (varsayılan öğe sayısı yalnızca bir intöğesine kadar uzanır). Ancak, bu stilin sağladığı en büyük avantaj, herhangi bir anda bellekte yalnızca bir veri öğelerinin alt kümesine sahip olma özelliğidir. Bu, sanal liste görünümü denetiminin, belirli verilere erişim yöntemlerinin zaten mevcut olduğu büyük bilgi veritabanlarıyla kullanım için uygun olmasını sağlar.
Uyarı
içinde sanal liste işlevselliği CListCtrlsağlamanın yanı sıra, MFC de CListView sınıfında aynı işlevselliği sağlar.
Sanal liste denetimleri geliştirirken bilmeniz gereken bazı uyumluluk sorunları vardır. Daha fazla bilgi için Windows SDK'sında List-View Denetimleri konusunun Uyumluluk Sorunları bölümüne bakın.
LVN_GETDISPINFO Bildirimini İşleme
Sanal liste denetimleri çok az öğe bilgisi tutar. Öğe seçimi ve odak bilgileri dışında, tüm öğe bilgileri denetimin sahibi tarafından yönetilir. Bilgiler çerçeve tarafından bir LVN_GETDISPINFO bildirim iletisiyle istenir. İstenen bilgileri sağlamak için, sanal liste denetimi sahibi (veya denetimin kendisi) bu bildirimi ele alması gerekir. Bu, Sınıf Sihirbazı kullanılarak kolayca yapılabilir (bkz. İletileri İşlevlere Eşleme). Sonuçta elde edilen kod aşağıdaki örneğe benzer olmalıdır ( CMyDialog burada sanal liste denetim nesnesinin sahibidir ve iletişim kutusu bildirimi işler):
ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST3, &CMyDialog::OnLvnGetdispinfoList3)
LVN_GETDISPINFO bildirim iletisinin işleyicisinde, hangi tür bilgilerin istendiğini denetlemeniz gerekir. Olası değerler şunlardır:
LVIF_TEXTpszText üyesi doldurulmalıdır.LVIF_IMAGEiImage üyesi doldurulmalıdır.LVIF_INDENTiIndent üyesi doldurulmalıdır.LVIF_PARAMlParam üyesi doldurulmalıdır. (Alt öğeler için mevcut değil.)LVIF_STATEEyalet üyesi doldurulmalıdır.
Daha sonra çerçeveye geri istenen bilgileri sağlamanız gerekir.
Aşağıdaki örnek (liste denetimi nesnesi için bildirim işleyicisinin gövdesinden alınan), bir öğenin metin arabellekleri ve görüntüsü için bilgi sağlayarak olası bir yöntemi gösterir:
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO *>(pNMHDR);
LVITEM *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;
}
Önbelleğe Alma ve Sanal Liste Denetimleri
Bu tür bir liste denetimi büyük veri kümelerine yönelik olduğundan, alma performansını geliştirmek için istenen öğe verilerini önbelleğe almanızı öneririz. Çerçeve, bir LVN_ODCACHEHINT bildirim iletisi göndererek önbelleği iyileştirmeye yardımcı olacak bir önbellek ipucu mekanizması sağlar.
Aşağıdaki örnek, önbelleği işleyici işlevine geçirilen aralıkla güncelleştirir.
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;
}
Önbelleği hazırlama ve koruma hakkında daha fazla bilgi için Windows SDK'sında List-View Denetimleri konusunun Önbellek Yönetimi bölümüne bakın.
Belirli Öğeleri Bulma
LVN_ODFINDITEM bildirim iletisi, belirli bir liste denetim öğesinin bulunması gerektiğinde sanal liste denetimi tarafından gönderilir. Bildirim iletisi, liste görünümü denetimi hızlı anahtar erişimi aldığında veya bir LVM_FINDITEM iletisi aldığında gönderilir. Arama bilgileri, NMLVFINDITEM yapısının bir üyesi olan LVFINDINFO yapısı biçiminde gönderilir. Liste kontrol nesnenizin OnChildNotify fonksiyonunu geçersiz kılarak bu iletiyi işleyin ve işleyicinin gövdesinde LVN_ODFINDITEM iletisini denetleyin. Bulunursa, uygun eylemi gerçekleştirin.
Liste görünümü denetimi tarafından verilen bilgilerle eşleşen bir öğeyi aramaya hazır olmanız gerekir. Başarılı olursa öğenin dizinini döndürmelisiniz veya eşleşen öğe bulunamazsa -1.