Aracılığıyla paylaş


Sanal liste denetimleri

Sanal liste denetimi içeren bir liste görünüm denetimi ise lvs_ownerdata stili.Bu stil öğe sayısı kadar desteklemek denetim sağlayan bir DWORD (için yalnızca varsayılan öğe sayısı genişleten bir int).Ancak, bu stili tarafından sağlanan yararı yapılandırılmasının yalnızca veri öğelerinin bir alt herhangi bir anda bellekte olan yeteneğidir.Bu verilere belirli yöntemleri zaten yerde nerede kendisini bilgi büyük veritabanları ile kullanmak üzere vermek sanal liste görünümü denetimi sağlar.

[!NOT]

Sanal liste işlevselliği sağlayan ek olarak CListCtrl, mfc da aynı işlevi sağlayan CListView sınıfı.

Sanal liste denetimleri yaparken bilmeniz gereken bazı uyumluluk sorunları vardır.Uyumluluk sorunları bölümüne liste görünüm denetimi konusunda daha fazla bilgi için bkz: Windows SDK.

LVN_GETDISPINFO bildirim işleme

Sanal liste denetimleri, çok az madde bilgilerini korur.Madde seçimi ve odak bilgileri dışında tüm madde bilgilerini denetim sahibi tarafından yönetilir.Bilgi framework tarafından istenen bir LVN_GETDISPINFO bildirim iletisi.İstenen bilgiyi sağlamak için sanal liste denetimi (veya Kontrol) sahibi bu bildirim işlemesi gerekir.Bu kolayca yapılabilir Properties penceresini kullanarak (bkz: İletileri işlevleri eşleme).Sonuç kodu aşağıdaki örnekteki gibi bir şey görünmelidir (burada CMyDialog sanal liste denetimi nesne sahibi ve iletişim, bildirim işleme):

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

İşleyici için de LVN_GETDISPINFO bildirim iletisi gerekir onay görmek ne tür bilgiler istendi.Olası değerler:

  • LVIF_TEXTpszText Üye doldurulmuş olmalı.

  • LVIF_IMAGEiImage Üye doldurulmuş olmalı.

  • LVIF_INDENTiIndent üye doldurulmuş olmalı.

  • LVIF_PARAMLParam üye doldurulmuş olmalı.(Alt öğelerini yoktur.)

  • LVIF_STATEDurumu üye doldurulmuş olmalı.

Sonra çerçevesini istenen tüm bilgileri vermeniz gerekir.

(Liste denetimi nesnesi için bildirim işleyicisi gövdesinden çekildiği) aşağıdaki örnek metin arabellekleri ve öğenin görüntü bilgilerini sağlayarak olası bir yöntemi gösterilmektedir:

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

Önbelleğe alma ve sanal liste denetimleri

Bu tür bir liste denetimi büyük veri kümeleri için hazırlandığı için istenen öğe verilerini alma performansı artırmak için önbelleğe önerilir.Önbellek ipuçları bir mekanizma göndererek önbellek en iyi duruma getirmede yardımcı olmak için bir çerçeve sağlar bir LVN_ODCACHEHINT bildirim iletisi.

Aşağıdaki örnek işleyicisi işlevine geçirilen aralığı önbelleğini 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;
}

Önbellek yönetimi bölümünde liste görünüm denetimi konu hazırlama ve önbellek bakımı hakkında daha fazla bilgi için bkz: Windows SDK.

Belirli öğeleri bulma

LVN_ODFINDITEM belirli bir liste denetimi öğesini bulunması gerektiğinde uyarı iletisi sanal liste denetimi tarafından gönderilir.Liste görünümü denetimi hızlı anahtar erişim aldığında veya aldığında bildirim iletisi gönderilen bir LVM_FINDITEM ileti.Arama bilgileri biçiminde gönderilen bir LVFINDINFO üye yapısı, NMLVFINDITEM yapısı.Geçersiz kılarak Bu mesajı ele OnChildNotify listenizin işlev Denetim nesnesi ve işleyici gövdesi içinde denetleme LVN_ODFINDITEM ileti.Durumunda bulunan, uygun eylemi gerçekleştirin.

Liste görünümü denetimi tarafından verilen bilgileri eşleşen bir öğe aramak hazırlıklı olmalıdır.Eşleşen bir öğe bulunursa başarılıysa öğe veya -1 dizinini döndürmesi gerekir.

Ayrıca bkz.

Başvuru

CListCtrl kullanma

Kavramlar

Denetimleri (mfc)