设计登陆窗口
首先创建一个图像列表,并通过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列插入数据