Cara Menambahkan Item dan Subitem Tampilan Daftar
Topik ini menunjukkan cara menambahkan item dan subitem ke kontrol tampilan daftar.
Apa yang perlu Anda ketahui
Teknologi
Prasyarat
- C/C++
- Pemrograman Antarmuka Pengguna Windows
Petunjuk
Untuk menambahkan item ke kontrol tampilan daftar, aplikasi harus terlebih dahulu menentukan struktur LVITEM lalu mengirim pesan LVM_INSERTITEM, menentukan alamat struktur LVITEM. Jika aplikasi menggunakan tampilan laporan, teks subitem harus disediakan.
Contoh kode C++ berikut mengisi struktur LVITEM dan menambahkan item tampilan daftar dengan menggunakan pesan LVM_INSERTITEM atau ListView_InsertItem makro yang sesuai. Karena aplikasi menyimpan teksnya sendiri, aplikasi menentukan nilai LPSTR_TEXTCALLBACK untuk anggota pszText dari struktur LVITEM . Menentukan nilai LPSTR_TEXTCALLBACK menyebabkan kontrol mengirim kode pemberitahuan LVN_GETDISPINFO ke jendela pemiliknya setiap kali perlu menampilkan item.
// InsertListViewItems: Inserts items into a list view.
// hWndListView: Handle to the list-view control.
// cItems: Number of items to insert.
// Returns TRUE if successful, and FALSE otherwise.
BOOL InsertListViewItems(HWND hWndListView, int cItems)
{
LVITEM lvI;
// Initialize LVITEM members that are common to all items.
lvI.pszText = LPSTR_TEXTCALLBACK; // Sends an LVN_GETDISPINFO message.
lvI.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_STATE;
lvI.stateMask = 0;
lvI.iSubItem = 0;
lvI.state = 0;
// Initialize LVITEM members that are different for each item.
for (int index = 0; index < cItems; index++)
{
lvI.iItem = index;
lvI.iImage = index;
// Insert items into the list.
if (ListView_InsertItem(hWndListView, &lvI) == -1)
return FALSE;
}
return TRUE;
}
// HandleWM_NOTIFY - Handles the LVN_GETDISPINFO notification code that is
// sent in a WM_NOTIFY to the list view parent window. The function
// provides display strings for list view items and subitems.
//
// lParam - The LPARAM parameter passed with the WM_NOTIFY message.
// rgPetInfo - A global array of structures, defined as follows:
// struct PETINFO
// {
// TCHAR szKind[10];
// TCHAR szBreed[50];
// TCHAR szPrice[20];
// };
//
// PETINFO rgPetInfo[ ] =
// {
// {TEXT("Dog"), TEXT("Poodle"), TEXT("$300.00")},
// {TEXT("Cat"), TEXT("Siamese"), TEXT("$100.00")},
// {TEXT("Fish"), TEXT("Angel Fish"), TEXT("$10.00")},
// {TEXT("Bird"), TEXT("Parakeet"), TEXT("$5.00")},
// {TEXT("Toad"), TEXT("Woodhouse"), TEXT("$0.25")},
// };
//
void HandleWM_NOTIFY(LPARAM lParam)
{
NMLVDISPINFO* plvdi;
switch (((LPNMHDR) lParam)->code)
{
case LVN_GETDISPINFO:
plvdi = (NMLVDISPINFO*)lParam;
switch (plvdi->item.iSubItem)
{
case 0:
plvdi->item.pszText = rgPetInfo[plvdi->item.iItem].szKind;
break;
case 1:
plvdi->item.pszText = rgPetInfo[plvdi->item.iItem].szBreed;
break;
case 2:
plvdi->item.pszText = rgPetInfo[plvdi->item.iItem].szPrice;
break;
default:
break;
}
break;
}
// NOTE: In addition to setting pszText to point to the item text, you could
// copy the item text into pszText using StringCchCopy. For example:
//
// StringCchCopy(plvdi->item.pszText,
// plvdi->item.cchTextMax,
// rgPetInfo[plvdi->item.iItem].szKind);
return;
}
Topik terkait