VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx

上传人:b****7 文档编号:10573668 上传时间:2023-02-21 格式:DOCX 页数:9 大小:24.77KB
下载 相关 举报
VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx_第1页
第1页 / 共9页
VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx_第2页
第2页 / 共9页
VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx_第3页
第3页 / 共9页
VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx_第4页
第4页 / 共9页
VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx

《VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx》由会员分享,可在线阅读,更多相关《VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx(9页珍藏版)》请在冰豆网上搜索。

VS和MFC编程入门之29常用控件列表视图控件List Control 下.docx

VS和MFC编程入门之29常用控件列表视图控件ListControl下

VS2010MFC编程入门之二十九(常用控件:

列表视图控件ListControl下)

关于列表视图控件ListControl的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义。

本节继续讲解下半部分,包括列表视图控件的创建、CListCtrl类的主要成员函数和CListCtrl类应用实例。

列表视图控件的创建

MFC同样为列表视图控件的操作提供了CListCtrl类。

如果我们不想在对话框模板中直接拖入ListControl来使用列表视图控件,而是希望动态创建它,则要用到CListCtrl类的成员函数Create函数,原型如下:

virtualBOOLCreate(

DWORDdwStyle,

constRECT&rect,

CWnd*pParentWnd,

UINTnID

);

参数rect为列表视图控件的位置和尺寸,pParentWnd为指向父窗口的指针,nID指定列表视图控件的ID,最复杂的一个参数同样还是dwStyle,它用于设定列表视图控件的风格,可以是以下风格的组合:

风格含义

LVS_ALIGNLEFT显示格式是大图标或小图标时,标签放在图标的左边

LVS_ALIGNTOP显示格式是大图标或小图标时,标题放在图标的上边

LVS_AUTOARRANGE显示格式是大图标或小图标时,自动排列控件中的列表项

LVS_EDITLABELS用户可以修改标签文本

LVS_ICON指定大图标显示格式

LVS_LIST指定列表显示格式

LVS_NOCOLUMNHEADER在报表格式中不显示列的表头

LVS_NOLABELWRAP显示格式是大图标时,使标签文本单行显示。

默认是多行显示

LVS_NOSCROLL列表视图控件无滚动条,此风格不能与LVS_LIST或LVS_REPORT组合使用

LVS_NOSORTHEADER报表格式的列表视图控件的表头不能作为排序按钮使用

LVS_OWNERDRAWFIXED由控件的拥有者负责绘制表项

LVS_REPORT指定报表显示格式

LVS_SHAREIMAGELISTS使列表视图共享图像序列

LVS_SHOWSELALWAYS即使控件失去输入焦点,仍显示出项的选择状态

LVS_SINGLESEL指定只能有一个列表项被选中。

默认时可以多项选择

LVS_SMALLICON指定小图标显示格式

LVS_SORTASCENDING按升序排列列表项

LVS_SORTDESCENDING按降序排列列表项

与前面的控件一样,除了以上风格一般我们还要为列表视图控件设置WS_CHILD和WS_VISIBLE风格。

对于直接在对话框模板中创建的列表视图控件,其属性页中的属性与上述风格是对应的,例如,属性Alignment默认为Left,也就等价于指定了LVS_ALIGNLEFT风格。

CListCtrl类的主要成员函数

CListCtrl类有很多成员函数,鸡啄米这里就为大家介绍几个常用的主要成员函数。

UINTGetSelectedCount()const;

该函数返回列表视图控件中被选择列表项的数量。

POSITIONGetFirstSelectedItemPosition()const;

获取列表视图控件中第一个被选择项的位置。

返回的POSITION值可以用来迭代来获取其他选择项,可以当作参数传入下面的GetNextSelectedItem函数来获得选择项的索引。

如果没有被选择项则返回NULL。

intGetNextSelectedItem(POSITION&pos)const;

该函数获取由pos指定的列表项的索引,然后将pos设置为下一个位置的POSITION值。

参数pos为之前调用GetNextSelectedItem或GetFirstSelectedItemPosition得到的POSITION值的引用。

返回值就是pos指定列表项的索引。

intGetItemCount()const;

获取列表视图控件中列表项的数量。

intInsertColumn(intnCol,constLVCOLUMN*pColumn);

intInsertColumn(intnCol,LPCTSTRlpszColumnHeading,intnFormat=LVCFMT_LEFT,intnWidth=-1,intnSubItem=-1);

这两个函数用于在报表式列表视图控件中插入列。

第一个函数中,nCol参数为插入列的索引,pColumn参数指向LVCOLUMN结构,其中包含了插入列的属性。

第二个函数中,nCol参数也是插入列的索引,lpszColumnHeading参数为列标题字符串,nFormat参数为列中文本的对齐方式,可以是LVCFMT_LEFT、LVCFMT_RIGHT或LVCFMT_CENTER,nWidth参数为列宽,nSubItem为插入列对应列表子项的索引。

两个函数在成功时都返回新列的索引,失败都返回-1。

BOOLDeleteColumn(intnCol);

该函数用于删除列表视图控件中的某列。

参数nCol为删除列的索引。

删除成功则返回TRUE,失败返回FALSE。

intInsertItem(intnItem,LPCTSTRlpszItem);

向列表视图控件中插入新的列表项。

参数nItem为要插入项的索引,参数lpszItem为要插入项的标签字符串。

如果插入成功则返回新列表项的索引,否则返回-1。

BOOLDeleteItem(intnItem);

从列表视图控件中删除某个列表项。

参数nItem指定了要删除的列表项的索引。

删除成功则返回TRUE,否则返回FALSE。

CStringGetItemText(intnItem,intnSubItem)const;

获取指定列表项或列表子项的显示文本。

参数nItem指定了列表项的索引,参数nSubItem指定了列表子项的索引。

BOOLSetItemText(intnItem,intnSubItem,LPCTSTRlpszText);

设置指定列表项或列表子项的显示文本。

参数nItem和nSubItem同GetItemText。

参数lpszText为要设置的显示文本字符串。

如果设置成功则返回TRUE,否则返回FALSE。

DWORD_PTRGetItemData(intnItem)const;

该函数用于获取指定列表项的附加32位数据。

参数nItem为列表项的索引。

返回值就是由nItem指定列表项的附加32位数据。

BOOLSetItemData(intnItem,DWORD_PTRdwData);

该函数用于为指定列表项设置附加32位是数据。

参数nItem为列表项的索引,参数dwData为列表项的附加32位数据。

CListCtrl类应用实例

最后鸡啄米还是给大家写一个简单的实例,说明CListCtrl类的几个成员函数及通知消息等的使用方法。

因为在开发中最常用的要属报表风格的ListControl了,所以鸡啄米给大家写的是一个报表ListControl的例子。

此实例实现的功能:

在单选列表视图控件中显示一个简单的编程语言排行榜,然后在用鼠标左键选择某列表项时,将选中列表项的文本显示到编辑框中。

下面是具体实现步骤:

1.创建一个基于对话框的MFC工程,名称设置为“Example29”。

2.在自动生成的对话框模板IDD_EXAMPLE29_DIALOG中,删除“TODO:

Placedialogcontrolshere.”静态文本控件、“OK”按钮和“Cancel”按钮。

添加一个ListControl控件,ID设置为IDC_PROGRAM_LANG_LIST,View属性设为Report,即为报表风格,SingleSelection属性设为True。

再添加一个静态文本控件和一个编辑框,静态文本控件的Caption属性设为“选择的语言:

”,编辑框的ID设为IDC_LANG_SEL_EDIT,ReadOnly属性设为True。

此时的对话框模板如下图:

3.为列表视图控件IDC_PROGRAM_LANG_LIST添加CListCtrl类型的控件变量m_programLangList。

4.在对话框初始化时,我们将编程语言排行榜加入到列表视图控件中,那么需要修改CExample29Dlg:

:

OnInitDialog()函数为:

C++代码

BOOLCExample29Dlg:

:

OnInitDialog()

{

CDialogEx:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

BOOLbNameValid;

CStringstrAboutMenu;

bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//TODO:

Addextrainitializationhere

CRectrect;

//获取编程语言列表视图控件的位置和大小

m_programLangList.GetClientRect(&rect);

//为列表视图控件添加全行选中和栅格风格

m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

//为列表视图控件添加三列

m_programLangList.InsertColumn(0,_T("语言"),LVCFMT_CENTER,rect.Width()/3,0);

m_programLangList.InsertColumn(1,_T("2012.02排名"),LVCFMT_CENTER,rect.Width()/3,1);

m_programLangList.InsertColumn(2,_T("2011.02排名"),LVCFMT_CENTER,rect.Width()/3,2);

//在列表视图控件中插入列表项,并设置列表子项文本

m_programLangList.InsertItem(0,_T("Java"));

m_programLangList.SetItemText(0,1,_T("1"));

m_programLangList.SetItemText(0,2,_T("1"));

m_programLangList.InsertItem(1,_T("C"));

m_programLangList.SetItemText(1,1,_T("2"));

m_programLangList.SetItemText(1,2,_T("2"));

m_programLangList.InsertItem(2,_T("C#"));

m_programLangList.SetItemText(2,1,_T("3"));

m_programLangList.SetItemText(2,2,_T("6"));

m_programLangList.InsertItem(3,_T("C++"));

m_programLangList.SetItemText(3,1,_T("4"));

m_programLangList.SetItemText(3,2,_T("3"));

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

5.我们希望在选中列表项改变时,将最新的选择项实时显示到编辑框中,那么可以使用NM_CLICK通知消息。

为列表框IDC_PROGRAM_LANG_LIST的通知消息NM_CLICK添加消息处理函数CExample29Dlg:

:

OnNMClickProgramLangList,并修改如下:

C++代码

voidCExample29Dlg:

:

OnNMClickProgramLangList(NMHDR*pNMHDR,LRESULT*pResult)

{

LPNMITEMACTIVATEpNMItemActivate=reinterpret_cast(pNMHDR);

//TODO:

Addyourcontrolnotificationhandlercodehere

*pResult=0;

CStringstrLangName;//选择语言的名称字符串

NMLISTVIEW*pNMListView=(NMLISTVIEW*)pNMHDR;

if(-1!

=pNMListView->iItem)//如果iItem不是-1,就说明有列表项被选择

{

//获取被选择列表项第一个子项的文本

strLangName=m_programLangList.GetItemText(pNMListView->iItem,0);

//将选择的语言显示与编辑框中

SetDlgItemText(IDC_LANG_SEL_EDIT,strLangName);

}

}

6.运行程序,弹出结果对话框,在对话框的列表框中用鼠标改变选中项时,编辑框中的显示会相应改变。

效果图如下:

关于列表视图控件ListControl的内容总算讲完了,内容不少,但实际上这些还只是一部分,在实际开发中会遇到各种问题,需要大家去查阅MSDN或上网找资料等来解决。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1