Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kontrol daftar virtual adalah kontrol tampilan daftar yang memiliki gaya LVS_OWNERDATA. Gaya ini memungkinkan kontrol untuk mendukung jumlah item hingga DWORD (jumlah item default hanya meluas ke int). Namun, keuntungan terbesar yang diberikan oleh gaya ini adalah kemampuan untuk hanya memiliki subset item data dalam memori kapan saja. Ini memungkinkan pengontrol tampilan daftar virtual dapat digunakan dengan database yang besar, di mana cara khusus untuk mengakses data sudah tersedia.
Nota
Selain menyediakan fungsionalitas daftar virtual di CListCtrl, MFC juga menyediakan fungsionalitas yang sama di kelas CListView .
Ada beberapa masalah kompatibilitas yang harus Anda ketahui saat mengembangkan kontrol daftar virtual. Untuk informasi selengkapnya, lihat bagian Masalah Kompatibilitas dari topik Kontrol List-View di Windows SDK.
Menangani Pemberitahuan LVN_GETDISPINFO
Kontrol daftar virtual hanya menyimpan sedikit informasi tentang item. Kecuali untuk pilihan item dan informasi fokus, semua informasi item dikelola oleh pemilik kontrol. Informasi diminta oleh kerangka kerja melalui pesan pemberitahuan LVN_GETDISPINFO. Untuk memberikan informasi yang diminta, pemilik kontrol daftar virtual (atau kontrol itu sendiri) harus menangani pemberitahuan ini. Ini dapat dengan mudah dilakukan menggunakan Panduan Kelas (lihat Memetakan Pesan ke Fungsi). Kode yang dihasilkan akan terlihat seperti contoh berikut (di mana CMyDialog memiliki objek kontrol daftar virtual dan dialog menangani pemberitahuan):
ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST3, &CMyDialog::OnLvnGetdispinfoList3)
Di handler untuk pesan pemberitahuan LVN_GETDISPINFO, Anda harus memeriksa jenis informasi apa yang diminta. Nilai yang mungkin adalah:
LVIF_TEXTAnggota pszText harus diisi.LVIF_IMAGEAnggota iImage harus diisi.LVIF_INDENTAnggota iIndent wajib diisi.LVIF_PARAMElemen lParam harus diisi. (Tidak ada untuk subitem.)LVIF_STATEBagian status harus diisi.
Anda kemudian harus memberikan informasi apa pun yang diminta kembali ke kerangka kerja.
Contoh berikut (diambil dari isi penangan pemberitahuan untuk objek kontrol daftar) menunjukkan satu metode yang mungkin dengan menyediakan informasi untuk buffer teks dan gambar item:
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;
}
Caching dan Kontrol Daftar Virtual
Karena jenis kontrol daftar ini ditujukan untuk himpunan data besar, disarankan agar Anda menyimpan data item yang diminta cache untuk meningkatkan performa pengambilan. Kerangka kerja menyediakan mekanisme petunjuk cache untuk membantu mengoptimalkan cache dengan mengirim pesan pemberitahuan LVN_ODCACHEHINT.
Contoh berikut memperbarui cache dengan rentang yang diteruskan ke fungsi handler.
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;
}
Untuk informasi selengkapnya tentang menyiapkan dan memelihara cache, lihat bagian Manajemen Cache dari topik kontrol List-View di Windows SDK.
Menemukan Item Tertentu
Pesan pemberitahuan LVN_ODFINDITEM dikirim oleh kontrol daftar virtual ketika item kontrol daftar tertentu perlu ditemukan. Pesan pemberitahuan dikirim saat kontrol tampilan daftar menerima akses kunci cepat atau saat menerima pesan LVM_FINDITEM. Informasi pencarian dikirim dalam bentuk struktur LVFINDINFO , yang merupakan anggota struktur NMLVFINDITEM . Tangani pesan ini dengan mengganti fungsi OnChildNotify dari objek kontrol daftar Anda dan di dalam badan handler, periksa pesan LVN_ODFINDITEM. Jika ditemukan, lakukan tindakan yang sesuai.
Anda harus siap untuk mencari item yang cocok dengan informasi yang diberikan oleh kontrol tampilan daftar. Anda harus mengembalikan indeks item jika berhasil, atau -1 jika tidak ada item yang cocok yang ditemukan.