win32强化练习4.9_快速建立ListView

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);


好了,以上第1步完成,下面我们来封装自己的类:

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");


至此,我们ListView基本应用就OK了,由于我主要使用它来进行显示,也不需要处理它的Notify消息(Notify消息处理与TreeView基本相似),我觉得能够简单快速的这样应用就可以了~






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值