下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 VC_ListBox的用法

VC_ListBox的用法.doc

VC_ListBox的用法

UC1038833535
2011-08-07 0人阅读 举报 0 0 暂无简介

简介:本文档为《VC_ListBox的用法doc》,可适用于IT/计算机领域

VCListBox的用法列表控件可以看作是功能增强的ListBox它提供了四种风格而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOLCreate(DWord dwStyle,constRECTrect,CWnd*pParentWnd,UINTnID)创建一个窗口dwStyle中可以使用以下一些列表控件的专用风格: LVSICONLVSSMALLICONLVSLISTLVSREPORT这四种风格决定控件的外观同时只可以选择其中一种分别对应:大图标显示小图标显示列表显示详细报表显示 LVSEDITLABELS结点的显示字符可以被编辑对于报表风格来讲可编辑的只为第一列。 LVSSHOWSELALWAYS在失去焦点时也显示当前选中的结点 LVSSINGLESEL同时只能选中列表中一项 首先你需要设置列表控件所使用的ImageList如果你使用大图标显示风格你就需要以如下形式调用: CImageList*SetImageList(CImageList*pImageList,LVSILNORMAL) 如果使用其它三种风格显示而不想显示图标你可以不进行任何设置否则需要以如下形式调用: CImageList*SetImageList(CImageList*pImageList,LVSILSMALL) 通过调用intInsertItem(intnItem,LPCTSTRlpszItem)可以在列表控件中nItem指明位置插入一项lpszItem为显示字符。除LVSREPORT风格外其他三种风格都只需要直接调用InsertItem就可以了但如果使用报表风格就必须先设置列表控件中的列信息。 通过调用intInsertColumn(intnCol,LPCTSTRlpszColumnHeading,intnFormat,intnWidth,intnSubItem)可以插入列。iCol为列的位置从零开始lpszColumnHeading为显示的列名nFormat为显示对齐方式nWidth为显示宽度nSubItem为分配给该列的列索引。 在有多列的列表控件中就需要为每一项指明其在每一列中的显示字符通过调用BOOLSetItemText(intnItem,intnSubItem,LPTSTRlpszText)可以设置每列的显示字符。nItem为设置的项的位置nSubItem为列位置lpszText为显示字符。下面的代码演示了如何设置多列并插入数据: mlistSetImageList(mlistSmall,LVSILSMALL)设置ImageList mlistInsertColumn(,"Col",LVCFMTLEFT,,)设置列 mlistInsertColumn(,"Col",LVCFMTLEFT,,) mlistInsertColumn(,"Col",LVCFMTLEFT,,) mlistInsertItem(,"Item")插入行 mlistSetItemText(,,"Item")设置该行的不同列的显示字符 mlistSetItemText(,,"Item") 此外CListCtrl还提供了一些函数用于得到修改控件的状态。 COLORREFGetTextColor()BOOLSetTextColor(COLORREFcr)用于得到设置显示的字符颜色。 COLORREFGetTextBkColor()BOOLSetTextBkColor(COLORREFcr)用于得到设置显示的背景颜色。 voidSetItemCount(intiCount)用于得到添加进列表中项的数量。 BOOLDeleteItem(intnItem)用于删除某一项BOOLDeleteAllItems()将删除所有项。 BOOLSetBkImage(HBITMAPhbm,BOOLfTile,intxOffsetPercent,intyOffsetPercent)用于设置背景位图。 CStringGetItemText(intnItem,intnSubItem)用于得到某项的显示字符。 列表控件的消息映射同样使用ONNOTIFY宏形式如同:ONNOTIFY(wNotifyCode,id,memberFxn)wNotifyCode为通知代码id为产生该消息的窗口IDmemberFxn为处理函数函数的原型如同voidOnXXXList(NMHDR*pNMHDR,LRESULT*pResult)其中pNMHDR为一数据结构在具体使用时需要转换成其他类型的结构。对于列表控件可能取值和对应的数据结构为: LVNBEGINLABELEDIT在开始某项编辑字符时发送所用结构:NMLVDISPINFO LVNENDLABELEDIT在结束某项编辑字符时发送所用结构:NMLVDISPINFO LVNGETDISPINFO在需要得到某项信息时发送(如得到某项的显示字符)所用结构:NMLVDISPINFO 关于ONNOTIFY有很多内容将在以后的内容中进行详细讲解。 关于动态提供结点所显示的字符:首先你在项时需要指明lpszItem参数为:LPSTRTEXTCALLBACK。在控件显示该结点时会通过发送TVNGETDISPINFO来取得所需要的字符在处理该消息时先将参数pNMHDR转换为LPNMLVDISPINFO然后填充其中itempszText。通过item中的iItem,iSubItem可以知道当前显示的为那一项。下面的代码演示了这种方法: charszOut={"No","No","No"} 添加结点 mlistInsertItem(LPSTRTEXTCALLBACK,) mlistInsertItem(LPSTRTEXTCALLBACK,) 处理消息 voidCParentWnd::OnGetDispInfoList(NMHDR*pNMHDR,LRESULT*pResult) {     LVDISPINFO*pLVDI=(LVDISPINFO*)pNMHDR     pLVDI>itempszText=szOutpTVDI>itemiItem通过iItem得到需要显示的字符在数组中的位置     *pResult= } 关于编辑某项的显示字符:(在报表风格中只对第一列有效)首先需要设置列表控件的LVSEDITLABELS风格在开始编辑时该控件将会发送LVNBEGINLABELEDIT你可以通过在处理函数中返回TRUE来取消接下来的编辑在编辑完成后会发送LVNENDLABELEDIT在处理该消息时需要将参数pNMHDR转换为LPNMLVDISPINFO然后通过其中的itempszText得到编辑后的字符并重置显示字符。如果编辑在中途中取消该变量为。下面的代码说明如何处理这些消息: 处理消息LVNBEGINLABELEDITvoidCParentWnd::OnBeginEditList(NMHDR*pNMHDR,LRESULT*pResult) {     LVDISPINFO*pLVDI=(LVDISPINFO*)pNMHDR     if(pLVDI>itemiItem==)判断是否取消该操作          *pResult=     else          *pResult= } 处理消息LVNBEGINLABELEDIT voidCParentWnd::OnBeginEditList(NMHDR*pNMHDR,LRESULT*pResult) {     LVDISPINFO*pLVDI=(LVDISPINFO*)pNMHDR     if(pLVDI>itempszText==)判断是否已经取消取消编辑           mlistSetItemText(pLVDI>itemiItem,,pLVDI>pszText)重置显示字符     *pResult= } 上面讲述的方法所进行的消息映射必须在父窗口中进行(同样WMNOTIFY的所有消息都需要在父窗口中处理)。 如何得到当前选中项位置:在列表控件中没有一个类似于ListBox中GetCurSel()的函数但是可以通过调用GetNextItem(,LVNIALL LVNISELECTED)得到选中项位置。列表控件可以看作是功能增强的ListBox它提供了四种风格而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOLCreate(DWord dwStyle,constRECTrect,CWnd*pParentWnd,UINTnID)创建一个窗口dwStyle中可以使用以下一些列表控件的专用风格: LVSICONLVSSMALLICONLVSLISTLVSREPORT这四种风格决定控件的外观同时只可以选择其中一种分别对应:大图标显示小图标显示列表显示详细报表显示 LVSEDITLABELS结点的显示字符可以被编辑对于报表风格来讲可编辑的只为第一列。 LVSSHOWSELALWAYS在失去焦点时也显示当前选中的结点 LVSSINGLESEL同时只能选中列表中一项 首先你需要设置列表控件所使用的ImageList如果你使用大图标显示风格你就需要以如下形式调用: CImageList*SetImageList(CImageList*pImageList,LVSILNORMAL) 如果使用其它三种风格显示而不想显示图标你可以不进行任何设置否则需要以如下形式调用: CImageList*SetImageList(CImageList*pImageList,LVSILSMALL) 通过调用intInsertItem(intnItem,LPCTSTRlpszItem)可以在列表控件中nItem指明位置插入一项lpszItem为显示字符。除LVSREPORT风格外其他三种风格都只需要直接调用InsertItem就可以了但如果使用报表风格就必须先设置列表控件中的列信息。 通过调用intInsertColumn(intnCol,LPCTSTRlpszColumnHeading,intnFormat,intnWidth,intnSubItem)可以插入列。iCol为列的位置从零开始lpszColumnHeading为显示的列名nFormat为显示对齐方式nWidth为显示宽度nSubItem为分配给该列的列索引。 在有多列的列表控件中就需要为每一项指明其在每一列中的显示字符通过调用BOOLSetItemText(intnItem,intnSubItem,LPTSTRlpszText)可以设置每列的显示字符。nItem为设置的项的位置nSubItem为列位置lpszText为显示字符。下面的代码演示了如何设置多列并插入数据: mlistSetImageList(mlistSmall,LVSILSMALL)设置ImageList mlistInsertColumn(,"Col",LVCFMTLEFT,,)设置列 mlistInsertColumn(,"Col",LVCFMTLEFT,,) mlistInsertColumn(,"Col",LVCFMTLEFT,,) mlistInsertItem(,"Item")插入行 mlistSetItemText(,,"Item")设置该行的不同列的显示字符 mlistSetItemText(,,"Item") 此外CListCtrl还提供了一些函数用于得到修改控件的状态。 COLORREFGetTextColor()BOOLSetTextColor(COLORREFcr)用于得到设置显示的字符颜色。 COLORREFGetTextBkColor()BOOLSetTextBkColor(COLORREFcr)用于得到设置显示的背景颜色。 voidSetItemCount(intiCount)用于得到添加进列表中项的数量。 BOOLDeleteItem(intnItem)用于删除某一项BOOLDeleteAllItems()将删除所有项。 BOOLSetBkImage(HBITMAPhbm,BOOLfTile,intxOffsetPercent,intyOffsetPercent)用于设置背景位图。 CStringGetItemText(intnItem,intnSubItem)用于得到某项的显示字符。 列表控件的消息映射同样使用ONNOTIFY宏形式如同:ONNOTIFY(wNotifyCode,id,memberFxn)wNotifyCode为通知代码id为产生该消息的窗口IDmemberFxn为处理函数函数的原型如同voidOnXXXList(NMHDR*pNMHDR,LRESULT*pResult)其中pNMHDR为一数据结构在具体使用时需要转换成其他类型的结构。对于列表控件可能取值和对应的数据结构为: LVNBEGINLABELEDIT在开始某项编辑字符时发送所用结构:NMLVDISPINFO LVNENDLABELEDIT在结束某项编辑字符时发送所用结构:NMLVDISPINFO LVNGETDISPINFO在需要得到某项信息时发送(如得到某项的显示字符)所用结构:NMLVDISPINFO 关于ONNOTIFY有很多内容将在以后的内容中进行详细讲解。 关于动态提供结点所显示的字符:首先你在项时需要指明lpszItem参数为:LPSTRTEXTCALLBACK。在控件显示该结点时会通过发送TVNGETDISPINFO来取得所需要的字符在处理该消息时先将参数pNMHDR转换为LPNMLVDISPINFO然后填充其中itempszText。通过item中的iItem,iSubItem可以知道当前显示的为那一项。下面的代码演示了这种方法: charszOut={"No","No","No"} 添加结点 mlistInsertItem(LPSTRTEXTCALLBACK,) mlistInsertItem(LPSTRTEXTCALLBACK,) 处理消息 voidCParentWnd::OnGetDispInfoList(NMHDR*pNMHDR,LRESULT*pResult) {     LVDISPINFO*pLVDI=(LVDISPINFO*)pNMHDR     pLVDI>itempszText=szOutpTVDI>itemiItem通过iItem得到需要显示的字符在数组中的位置     *pResult= } 关于编辑某项的显示字符:(在报表风格中只对第一列有效)首先需要设置列表控件的LVSEDITLABELS风格在开始编辑时该控件将会发送LVNBEGINLABELEDIT你可以通过在处理函数中返回TRUE来取消接下来的编辑在编辑完成后会发送LVNENDLABELEDIT在处理该消息时需要将参数pNMHDR转换为LPNMLVDISPINFO然后通过其中的itempszText得到编辑后的字符并重置显示字符。如果编辑在中途中取消该变量为。下面的代码说明如何处理这些消息: 处理消息LVNBEGINLABELEDITvoidCParentWnd::OnBeginEditList(NMHDR*pNMHDR,LRESULT*pResult) {     LVDISPINFO*pLVDI=(LVDISPINFO*)pNMHDR     if(pLVDI>itemiItem==)判断是否取消该操作          *pResult=     else          *pResult= } 处理消息LVNBEGINLABELEDIT voidCParentWnd::OnBeginEditList(NMHDR*pNMHDR,LRESULT*pResult) {     LVDISPINFO*pLVDI=(LVDISPINFO*)pNMHDR     if(pLVDI>itempszText==)判断是否已经取消取消编辑           mlistSetItemText(pLVDI>itemiItem,,pLVDI>pszText)重置显示字符     *pResult= } 上面讲述的方法所进行的消息映射必须在父窗口中进行(同样WMNOTIFY的所有消息都需要在父窗口中处理)。 如何得到当前选中项位置:在列表控件中没有一个类似于ListBox中GetCurSel()的函数但是可以通过调用GetNextItem(,LVNIALL LVNISELECTED)得到选中项位置。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/6

VC_ListBox的用法

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利