列表视图控件

设计登陆窗口

首先创建一个图像列表,并通过SetImageList方法将列表视图控件和图像列表关联到一起。

CImageList* SetImageList(CImageList* pImageList,int nImageList);

pImageList:标识图像列表指针。

nImageList:标识图像列表类型。

LVSIL_NORMAL:图像列表具有大图标

LVSIL_SMALL:图像列表具有小图标

LVSIL_STATE:图像列表具有状态图标

然后调用InsertItem方法向列表视图控件插入数据

CImageList m_ImageList;
CListCtrl    m_Icon;

m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,0);//创建列表视图窗口
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));    //向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); 
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON7));
m_Icon.SetImageList(&m_ImageList,LVSIL_NORMAL);//将图像列表关联到列表视图控件中
m_Icon.InsertItem(0,"王一",0);
m_Icon.InsertItem(1,"孙二",1);//向列表视图中添加数据
m_Icon.InsertItem(2,"刘三",2);
m_Icon.InsertItem(3,"吕四",3);
m_Icon.InsertItem(4,"庞五",4);
m_Icon.InsertItem(5,"宋六",5);
m_Icon.InsertItem(6,"孙七",6);

将数据加载到列表

首先调用SetExtendStyle方法设置列表视图控件的扩展风格。

然后调用InsertColoumn方法向列表视图控件添加列。

在插入数据时先调用InsertItem方法插入列,接着调用SetItemText方法向列表中的每一列插入数据;

在使用列表视图控件时,有时会因为数据插入错误需要删除数据。在删除数据前首先要获得要删除数据的索引,可以调用

GetSelectionMark方法实现,该方法用于获取列表视图中当前选中的视图项索引,还可以使用DeleteAllItems方法删除所有的视图项。

CListCtrl    m_Grid;
CString    m_Name;
CString    m_Agname;

//设置列表视图的扩展风格
m_Grid.SetExtendedStyle(LVS_EX_FLATSB    //扁平风格显示滚动条
        |LVS_EX_FULLROWSELECT                //允许整行选中
        |LVS_EX_HEADERDRAGDROP                //允许整列拖动
        |LVS_EX_ONECLICKACTIVATE            //单击选中项
        |LVS_EX_GRIDLINES);                    //画出网格线
//设置表头
m_Grid.InsertColumn(0,"姓名",LVCFMT_LEFT,130,0); //设置姓名列
m_Grid.InsertColumn(1,"绰号",LVCFMT_LEFT,130,1); //设置绰号列
void CInsertListDlg::OnButadd() 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    int count = m_Grid.GetItemCount();
    m_Grid.InsertItem(count,"");
    m_Grid.SetItemText(count,0,m_Name);
    m_Grid.SetItemText(count,1,m_Agname);
}

void CInsertListDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
    // TODO: Add your control notification handler code here
    int pos  = m_Grid.GetSelectionMark();
    m_Name   = m_Grid.GetItemText(pos,0);
    m_Agname = m_Grid.GetItemText(pos,1);
    UpdateData(FALSE);
    *pResult = 0;
}

void CInsertListDlg::OnButdel() 
{
    // TODO: Add your control notification handler code here
    int pos  = m_Grid.GetSelectionMark();
    m_Grid.DeleteItem(pos);
}

void CInsertListDlg::OnButclear() 
{
    // TODO: Add your control notification handler code here
    m_Grid.DeleteAllItems();
}

具有位图背景的控件

可以使用SetBkImage方法设置列表视图控件的当前背景图像

如果只使用此方法为控件添加背景,在显示文字时字体的白色背景会将位图背景覆盖,从而影响界面的美观

要解决这一问题,可以通过SetTextBkColor方法设置文本背景颜色

在程序初始化时调用CoInitialize函数初始化COM环境

CImageList m_ImageList;
CListCtrl    m_Icon;

m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,0);    //创建列表视图窗口
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));        //向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));         //向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));         //向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));         //向图像列表中添加图标
m_Icon.SetImageList(&m_ImageList,LVSIL_NORMAL);        //将图像列表关联到列表视图控件中
m_Icon.InsertItem(0,"王一",0);                            //向列表视图中添加数据
m_Icon.InsertItem(1,"孙二",1);                             //向列表视图中添加数据
m_Icon.InsertItem(2,"刘三",2);                             //向列表视图中添加数据
m_Icon.InsertItem(3,"吕四",3);                             //向列表视图中添加数据
char buf[256];
::GetCurrentDirectory(256,buf);
strcat(buf,"\BK.bmp");
m_Icon.SetBkImage(buf);
m_Icon.SetTextBkColor(CLR_NONE);

动态创建列表视图控件

动态创建列表视图控件需要使用Create方法,该方法可以创建一个列表视图控件

在对话框头文件中声明一个CListCtrl类变量m_List

然后调用MoveWindow函数设置控件的显示位置,最后调用ShowWindow函数显示控件

CListCtrl m_List;
m_List.Create(LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS|WS_BORDER,
        CRect(0,0,0,0),this,10001);
//设置列表视图的扩展风格
m_List.SetExtendedStyle(LVS_EX_FLATSB            //扁平风格显示滚动条
        |LVS_EX_FULLROWSELECT                    //允许整行选中
        |LVS_EX_HEADERDRAGDROP                //允许整列拖动
        |LVS_EX_ONECLICKACTIVATE                //单击选中项
        |LVS_EX_GRIDLINES);                        //画出网格线

m_List.MoveWindow(10,10,300,200);
m_List.ShowWindow(SW_SHOW);
//设置表头
m_List.InsertColumn(0,"姓名",LVCFMT_LEFT,150,0);     //设置姓名列
m_List.InsertColumn(1,"所属国家",LVCFMT_LEFT,150,1);     //设置所属国家列
m_List.InsertItem(0,"");                        //插入第0行
m_List.SetItemText(0,0,"关羽");                //向第0列插入数据
m_List.SetItemText(0,1,"蜀国");                //向第1列插入数据
m_List.InsertItem(1,"");                        //插入第1行
m_List.SetItemText(1,0,"赵云");                //向第0列插入数据
m_List.SetItemText(1,1,"蜀国");                //向第1列插入数据
原文地址:https://www.cnblogs.com/wangfx91/p/4993881.html