如何新增清單檢視專案和子專案
本主題示範如何將專案和子專案新增至清單檢視控件。
您需要知道的事項
技術
必要條件
- C/C++
- Windows 使用者介面程序設計
指示
若要將專案新增至清單檢視控件,應用程式必須先定義 LVITEM 結構,然後傳送LVM_INSERTITEM訊息,並指定 LVITEM 結構的位址。 如果應用程式使用報表檢視,則必須提供子項目文字。
下列 C++ 程式代碼範例會填入 LVITEM 結構,並使用LVM_INSERTITEM訊息或對應的宏ListView_InsertItem來新增清單檢視專案。 因為應用程式會儲存自己的文字,所以它會指定 LVITEM 結構的 pszText 成員LPSTR_TEXTCALLBACK值。 指定LPSTR_TEXTCALLBACK值會導致控件在需要顯示專案時,將LVN_GETDISPINFO通知碼傳送至其擁有者視窗。
// 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;
}
相關主題