ListView的使用是非常多的,大多数情况下是用来显示,这一节我们来快速建立一下ListView:
仍然是分2步来,第1步使用Win32的SDK来建,而第2步我们来封装一个类。
第一步:
步骤如下:
1. 包含头文件及链接库:#include <commctrl.h>,连接到comctl32.lib 或libcomctl32.a
2. 声明HWND hListView; 并用CreateWindow创建窗口
hButton = CreateWindow("syslistview32", "",
WS_VISIBLE|WS_CHILD|WS_BORDER|LVS_EX_GRIDLINES|
LVS_REPORT | LVS_SHOWSELALWAYS,
10, 20,200,100,
hwnd, (HMENU)IDC_LV, g_hInst, NULL);
3. 使用2个结构体:LVITEM和LVCOLUMN,它与TreeView还是比较相似的,对于ListView来说,先要Insert一行,然后用SetItem对此行的不同列进行设定!
LV_ITEM item; // 项
LV_COLUMN colmn; // 列
ZeroMemory(&item, sizeof(LV_ITEM));
ZeroMemory(&colmn, sizeof(LV_COLUMN));
4. 先要建立表头,注意一下,如果wParam是0,则每次在前面Insert,那么最先的一项反而在最右边:
colmn.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; // 风格
colmn.pszText = "进程名"; // 文字
colmn.cx = 0x62; // 后面列
SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);
colmn.pszText = "内存使用";
colmn.cx = 0x102;
SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);
colmn.pszText = "ID";
colmn.cx = 0x62;
SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);
5. 每一行都是先Insert行,再set列,我们先来添加行:
item.pszText = "德国";
SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
item.pszText = "俄国";
SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
然后再来添加带3列的行,注意行用InsertItem,而列用SetItem,SendMessage也可以用宏来替代,如果你使用的GCC编译器,有可能找不到宏,建立在练习这个控件的时候,还是使用MicroSoft的编译器!
item.iSubItem = 0;
item.pszText = "中国";
SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
item.iSubItem = 1;
item.pszText = "go1";
SendMessage(hButton, LVM_SETITEM, 0, (LPARAM)&item);
item.iSubItem = 2;
item.pszText = "go2";
ListView_SetItem(hButton,&item);
class MyLV
{
public:
MyLV();
MyLV(HWND hLV)
{
colmn.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; //
hListView = hLV;
}
void InsertLVItem(int row, char *ss)//添加行
{
item.iItem = row;
item.iSubItem = 0;
item.pszText = ss;
SendMessage(hListView, LVM_INSERTITEM, row, (LPARAM)&item);
}
void SetLVItem(int row, int col, char * ss)//设置某行某列的文本
{
item.iItem = row;
item.iSubItem = col;
item.pszText = ss;
SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)&item);
}
private:
LV_ITEM item;
LV_COLUMN colmn;
HWND hListView;
};
这样,我们就可以比较轻松的操作了,例如:
MyLV LV(hButton);
LV.InsertLVItem(0,"EngSpeed");
LV.SetLVItem(0,1,"0C9");
LV.InsertLVItem(1,"EPEDPOSN");
LV.SetLVItem(1,1,"1F1");