建立一个 List View 控件
// Create ListView
hwndRet = CreateWindow (WC_LISTVIEW, NULL,
WS_CHILD |
WS_VISIBLE |
LVS_REPORT |
/*LVS_OWNERDATA | */ // 说明 1
LVS_NOCOLUMNHEADER,
0,
0,
mainRect.right - mainRect.left,
mainRect.bottom - mainRect.top,
hwndPrnt,
(HMENU)ID_LISTVIEW, // 控件 ID
g_hInst, 0);
说明1: 如果建立 ListView 时加上LVS_OWNERDATA 标致, 系统就不会画出由 ListView_InsertItem 插入的内容, 程序员要自己在 WM_NOTIFY 处处理. 以下是例子:
case WM_NOTIFY:
if (ID_LISTVIEW == wParam)
return OnListViewNotify(hWnd, lParam);
break;
LRESULT OnListViewNotify(HWND hwnd, LPARAM lParam)
{
NMHDR* pnmh = (NMHDR*) lParam;
LRESULT lResult = 0;
switch(pnmh->code)
{
case LVN_GETDISPINFO:
{
LV_DISPINFO* pdi = (LV_DISPINFO*)lParam;
if(0 == pdi->item.iSubItem)
{
if(pdi->item.mask & LVIF_TEXT)
{
wcscpy(pdi->item.pszText, L"1213213421");
pdi->item.cchTextMax = wcslen(pdi->item.pszText);
pdi->item.iItem;
}
if(pdi->item.mask & LVIF_IMAGE)
{
pdi->item.iImage = 0;
}
}
else
{
if(pdi->item.mask & LVIF_TEXT)
{
pdi->item.pszText;
pdi->item.cchTextMax;
pdi->item.iItem;
pdi->item.iSubItem;
}
}
}
break;
case LVN_ITEMACTIVATE:
break;
// Handle this notify if you want to use the number keys to select
// items in the view (like how the desktop file explorer lets you
// select files by typing the first few characters of the file name.)
// This notify is also used then the control is sent an LVM_FINDITEM
case LVN_ODFINDITEM:
{
NMLVFINDITEM* pFindItem = (NMLVFINDITEM*)lParam;
// Used if you are trying to find an item in the list view
}
break;
}
return(lResult);
}
否则相反系统不会发送 WM_NOTIFY 事件. 并会自动画出由 ListView_InsertItem 添加的内容.