ListCtrl控件使用技巧Word格式.docx

上传人:b****2 文档编号:5253919 上传时间:2023-05-04 格式:DOCX 页数:15 大小:21KB
下载 相关 举报
ListCtrl控件使用技巧Word格式.docx_第1页
第1页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第2页
第2页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第3页
第3页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第4页
第4页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第5页
第5页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第6页
第6页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第7页
第7页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第8页
第8页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第9页
第9页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第10页
第10页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第11页
第11页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第12页
第12页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第13页
第13页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第14页
第14页 / 共15页
ListCtrl控件使用技巧Word格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ListCtrl控件使用技巧Word格式.docx

《ListCtrl控件使用技巧Word格式.docx》由会员分享,可在线阅读,更多相关《ListCtrl控件使用技巧Word格式.docx(15页珍藏版)》请在冰点文库上搜索。

ListCtrl控件使用技巧Word格式.docx

lStyle&

=~LVS_TYPEMASK;

//清除显示方式位

lStyle|=LVS_REPORT;

//设置style

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);

DWORDdwStyle=m_ListCtrl.GetExtendedStyle();

//获取当前扩展样式

dwStyle|=LVS_EX_FULLROWSELECT;

//选中某行使整行高亮(report风格时)

dwStyle|=LVS_EX_GRIDLINES;

//网格线(report风格时)

dwStyle|=LVS_EX_CHECKBOXES;

//item前生成checkbox控件

m_ListCtrl.SetExtendedStyle(dwStyle);

//设置扩展风格

m_ListCtrl.InsertColumn(0,"

名称"

LVCFMT_LEFT,50);

//插入列

m_ListCtrl.InsertColumn(1,"

备注"

//直接插入:

intnRow=m_ListCtrl.InsertItem(0,"

VC++"

);

 

//插入行

m_ListCtrl.SetItemText(nRow,1,"

VisualC++6.0"

//设置数据

//LVITEM结构插入:

LVITEMitem={0};

item.iItem=0;

//行号

item.mask=LVIF_TEXT;

/*LVIF_IMAGE支持图标*/;

item.cchTextMax=15;

//插入字符串长度

item.pszText="

;

intnRow=m_ListCtrl.InsertItem(&

item);

选中style中的Showselectionalways,

或者添加扩展样式LVS_SHOWSELALWAYS

intnIndex=0;

//选中

m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|

LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);

//取消选中

m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);

CStringstr;

for(inti=0;

i<

m_ListCtrl.GetItemCount();

i++)

{

if(m_ListCtrl.GetItemState(i,LVIS_SELECTED)==

LVIS_SELECTED||m_ListCtrl.GetCheck(i))

{

str.Format(_T("

第%d行的checkbox为选中状态"

),i);

AfxMessageBox(str);

}

}

//方法一:

if(m_ListCtrl.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)

选中了第%d行"

//方法二:

POSITIONpos=m_ListCtrl.GetFirstSelectedItemPosition();

if(pos==NULL)

TRACE0("

Noitemswereselected!

\n"

else

while(pos)

intnItem=m_ListCtrl.GetNextSelectedItem(pos);

TRACE1("

Item%dwasselected!

nItem);

//添加其他操作

TCHARszBuf[1024];

LVITEMlvi;

lvi.iItem=nItemIndex;

lvi.iSubItem=0;

lvi.mask=LVIF_TEXT;

lvi.pszText=szBuf;

lvi.cchTextMax=1024;

m_ListCtrl.GetItem(&

lvi);

关于得到设置item的状态,还可以参考msdn文章

Q173242:

UseMaskstoSet/GetItemStatesinCListCtrl

LVCOLUMNlvcol;

charstr[256];

int 

nColNum;

CStringstrColumnName[3];

//假如有3列

nColNum=0;

lvcol.mask=LVCF_TEXT;

lvcol.pszText=str;

lvcol.cchTextMax=256;

while(m_list.GetColumn(nColNum,&

lvcol))

{

strColumnName[nColNum]=lvcol.pszText;

nColNum++;

m_ListCtrl.EnsureVisible(i,FALSE);

intnHeadNum=m_ListCtrl.GetHeaderCtrl()->

GetItemCount();

方法一:

while(m_ListCtrl.DeleteColumn(0))

//因为你删除了第一列后,后面的列会依次向上移动。

方法二:

intnColumns=3;

//列数

for(inti=nColumns-1;

i>

=0;

i--)

m_ListCtrl.DeleteColumn(i);

添加listctrl控件的NM_CLICK消息相应函数

voidCMyDlg:

:

OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)

//方法一:

DWORDdwPos=GetMessagePos();

CPointpoint(LOWORD(dwPos),HIWORD(dwPos));

m_ListCtrl.ScreenToClient(&

point);

LVHITTESTINFOlvinfo;

lvinfo.pt=point;

lvinfo.flags=LVHT_ABOVE;

intnItem=m_ListCtrl.SubItemHitTest(&

lvinfo);

if(nItem!

=-1)

CStringstrtemp;

strtemp.Format("

单击的是第%d行第%d列"

lvinfo.iItem,lvinfo.iSubItem);

AfxMessageBox(strtemp);

//方法二:

NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;

if(pNMListView->

iItem!

pNMListView->

iItem,pNMListView->

iSubItem);

*pResult=0;

DWORDdwPos=GetMessagePos();

CPointpoint(LOWORD(dwPos),HIWORD(dwPos));

m_ListCtrl.ScreenToClient(&

LVHITTESTINFOlvinfo;

lvinfo.pt=point;

lvinfo.flags=LVHT_ABOVE;

UINTnFlag;

intnItem=m_ListCtrl.HitTest(point,&

nFlag);

//判断是否点在checkbox上

if(nFlag==LVHT_ONITEMSTATEICON)

AfxMessageBox("

点在listctrl的checkbox上"

}

添加CListCtrl控件的NM_RCLICK消息相应函数

OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult)

NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;

if(pNMListView->

DWORDdwPos=GetMessagePos();

CPointpoint(LOWORD(dwPos),HIWORD(dwPos));

CMenumenu;

VERIFY(menu.LoadMenu(IDR_MENU1));

CMenu*popup=menu.GetSubMenu(0);

ASSERT(popup!

=NULL);

popup->

TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,

point.x,point.y,this);

m_ListCtrl.SetRedraw(FALSE);

//更新内容

m_ListCtrl.SetRedraw(TRUE);

m_ListCtrl.Invalidate();

m_ListCtrl.UpdateWindow();

//或者参考

/////////////////////////////////////////////////********************************************************************************************************************************

CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理

2009年08月03日星期一下午04:

18

LVN_BEGINDRAG鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图控件中的项目时产生)

LVN_BEGINRDRAG鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图控件中的项目时产生)

LVN_BEGINLABELEDIT开始编辑项的文本

LVN_COLUMNCLICK单击列(当鼠标单击列表视图控件列标题时产生)

NM_CLICK当鼠标单击列表视图控件时产生

LVN_COLUMNCLICK单击列

LVN_DELETEALLITEMS删除所有项

LVN_DELETEITEM删除某个项

NM_DBLCLK当鼠标双击列表视图控件时产生

LVN_ENDLABELEDIT结束对项文本的编辑

LVN_GETDISPINFO请求需要显示的信息

LVN_GETINFOTIP请求显示在工具提示窗口内的附加的文本信息

LVN_HOTTRACK鼠标滑过某个项

LVN_INSERTITEM当向列表视图控件插入项目时产生

lVN_ITEMACTIVATE激活某个项

LVN_ITEMCHANGED某个项已经发生变化

LVN_ITEMCHANGING某个项目正在发生变化

NM_KILLFOCUS当视表列图控件失去焦点时产生

LVN_KEYDOWN某个键被按下

LVN_MARQUEEBEGIN开始某个边框选择

NM_OUTOFMEMORY当内存溢出时产生

LVN_ODCACHEHINT虚拟列表控件的显示区域的内容发生了变化

LVN_ODSTATECHANGED虚拟列表的控件的某个项或某个范围内的项已经发生变化

LVN_ODFINDITEM需要拥有者查找一个特定的回调项

NM_RCLICK当鼠标右键单击列表视图控件时产生

NM_RDBLCLK当鼠标右键双击列表视图控件时产生

NM_SETFOCUS当列表视图控件获得焦点时产生

LVN_SETDISPINFO父窗口必须更新控件为项所维护的信息

注解:

HDN:

HeaderNotify

LVN:

ListViewcontrolNotify

NM:

NotifyMessage

TVN:

TreeViewcontrolNotify

LVN_ITEMCHANGED消息的处理

消息处理函数:

voidC***Dlg:

OnItemchangedList(NMHDR*pNMHDR,LRESULT*pResult)

NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;

uChanged==LVIF_STATE)

uNewState&

LVIS_SELECTED)

//处理内容

intnItem=pNMListView->

iItem;

CStringvalue[6];

for(inti=0;

i<

6;

i++)

value[i]=m_List.GetItemText(nItem,i);

*pResult=0;

消息处理函数中的两个if条件句一定要有,否则可能出现多次进入处理内容的问题。

鼠标双击列表项事件的处理

响应NM_DBLCLK消息:

voidCDisSalaryDlg:

OnDblclkList(NMHDR*pNMHDR,LRESULT*pResult)

NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;

intnItem=pNMListView->

if(nItem>

=0&

&

nItem<

m_List.GetItemCount()) 

//判断双击位置是否在有数据的列表项上面

.............

消息处理函数中的if语句很重要,用于判断双击位置是否在有数据的列表项上面。

因为NM_DBLCLK消息是CListCtrl控件(整体)消息,只要是在CListCtrl控件范围之内执行此事件就会产生该消息,而不一定要在有数据的列表项上面。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

防止CListCtrl闪烁的几种方法

(2009-12-2811:

24:

15)

转载

标签:

listctrl

闪烁

防止

it

分类:

VC及相关

1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘

m_ctlList.SetRedraw(FALSE);

//以下为更新数据操作

//……

//恢复窗口重绘

m_ctlList.SetRedraw(TRUE);

2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowUpdate恢复窗口重绘

m_ctlList.LockWindowUpdate();

m_ctlList.UnlockWindowUpdate();

3.使用ListCtrl的内部双缓冲

m_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()|LVS_EX_DOUBLEBUFFER);

VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,如下:

#defineLVS_EX_DOUBLEBUFFER 

0x00010000

4.VirtualList

首先要设置ListCtrl风格为LVS_REPORT|LVS_OWNERDATA或在ListCtrl属里中的MoreStyles页面中选中Ownerdata复选框。

其次要向应LVN_GETDISPINFO消息;

voidOnGetdispinfoList(NMHDR*pNMHDR,LRESULT*pResult)

LV_DISPINFO*pDispInfo=(LV_DISPINFO*)pNMHDR;

LV_ITEM*pItem=&

(pDispInfo)->

i

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2