使用ListView控件,我们需要初始化公共控件库,所以我们要在初始化时调用InitCommonControls()函数。
如果调用发生链接错误,说明我们没有链接拥有该函数的库文件。它们对应的头和库 DLL分别为 #include <commctrl.h> comctl32.lib comctl32.dll
接下来我们要利用CreateWindow方法或者CreateWindowEx方法创建ListView控件,设定自己需要的风格(LVS_REPORT | LVS_SHOWSELALWAYS等)。
ListView最常见的操作就是插入项和列,在这里需要两个结构体:LVITEM和LVCOLUMN
这两个结构体定义分别为:
typedef struct _LVITEM { UINT mask; int iItem; int iSubItem; UINT state; UINT stateMask; LPTSTR pszText; int cchTextMax; int iImage; LPARAM lParam; #if (_WIN32_IE >= 0x0300) int iIndent; #endif #if (_WIN32_IE >= 0x560) int iGroupId; UINT cColumns; // tile view columns PUINT puColumns; #endif typedef struct _LVCOLUMN { UINT mask; int fmt; int cx; LPTSTR pszText; int cchTextMax; int iSubItem; #if (_WIN32_IE >= 0x0300) int iImage; int iOrder; #endif } LVCOLUMN, *LPLVCOLUMN; } LVITEM, *LPLVITEM;
有了这两个结构体,我们就可以利用SendMessage来给ListView控件发送消息来为它添加项和列。
我们分别通过下面两个消息来添加项和列。
SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);
LVM_INSERTITEM表示添加项
LVM_INSERTCOLUMN表示添加列。
其它的一些操作可通过查看msdn来学习。
//初始化列
LV_COLUMN lvc;
lvc.mask = LVCF_TEXT | LVCF_WIDTH;
for(i = 0 ; i < 5 ; i ++)
{
lvc.cx = 50 ;
lvc.pszText = _T("test") ;
ListView_InsertColumn(ListView , i , &lvc );
}
//插入行
LVITEM lvitem;
lvitem.mask=LVIF_TEXT;
lvitem.cchTextMax=MAX_PATH;
lvitem.iSubItem=0;
lvitem.pszText = TEXT("");
lvitem.iItem=0;//插入第几行,从0开始
ListView_InsertItem(Detail_List,&lvitem);
for(i = 0 ;i < 5 ;i ++)
ListView_SetItemText(ListView,lvitem.iItem,i,TEXT(_T("test"));
}