ListCtrl控件的风格设置.docx

上传人:b****5 文档编号:4283917 上传时间:2022-11-28 格式:DOCX 页数:21 大小:26.85KB
下载 相关 举报
ListCtrl控件的风格设置.docx_第1页
第1页 / 共21页
ListCtrl控件的风格设置.docx_第2页
第2页 / 共21页
ListCtrl控件的风格设置.docx_第3页
第3页 / 共21页
ListCtrl控件的风格设置.docx_第4页
第4页 / 共21页
ListCtrl控件的风格设置.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

ListCtrl控件的风格设置.docx

《ListCtrl控件的风格设置.docx》由会员分享,可在线阅读,更多相关《ListCtrl控件的风格设置.docx(21页珍藏版)》请在冰豆网上搜索。

ListCtrl控件的风格设置.docx

ListCtrl控件的风格设置

1.ListCtrl风格

LVS_ICON:

为每个item显示大图标

LVS_SMALLICON:

为每个item显示小图标

LVS_LIST:

显示一列带有小图标的item

LVS_REPORT:

显示item详细资料

直观的理解:

windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”

--------------------------------------------------------------------------------

2.设置listctrl风格及扩展风格

LONGlStyle;

lStyle=GetWindowLong(m_list.m_hWnd,GWL_STYLE);//获取当前窗口style

lStyle&=~LVS_TYPEMASK;//清除显示方式位

lStyle|=LVS_REPORT;//设置style

SetWindowLong(m_list.m_hWnd,GWL_STYLE,lStyle);//设置style

DWORDdwStyle=m_list.GetExtendedStyle();

dwStyle|=LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)

dwStyle|=LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)

dwStyle|=LVS_EX_CHECKBOXES;//item前生成checkbox控件

m_list.SetExtendedStyle(dwStyle);//设置扩展风格

--------------------------------------------------------------------------------

3.插入数据

m_list.InsertColumn(0,"ID",LVCFMT_LEFT,40);//插入列

m_list.InsertColumn(1,"NAME",LVCFMT_LEFT,50);

intnRow=m_list.InsertItem(0,“11”);//插入行

m_list.SetItemText(nRow,1,“jacky”);//设置数据

--------------------------------------------------------------------------------

4.一直选中item

选中style中的Showselectionalways,或者在上面第2点中设置LVS_SHOWSELALWAYS

--------------------------------------------------------------------------------

5.选中和取消选中一行

intnIndex=0;

//选中

m_list.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);

//取消选中

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

--------------------------------------------------------------------------------

6.得到listctrl中所有行的checkbox的状态

m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);

CStringstr;

for(inti=0;i

{

if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED||m_list.GetCheck(i))

{

str.Format(_T("第%d行的checkbox为选中状态"),i);

AfxMessageBox(str);

}

}

CStringstrIns;

strIns="deletefromtmpStatByGround";

m_pRs.CreateInstance(__uuidof(Recordset));

m_pRs->CursorLocation=adUseClient;

m_pRs->Open((LPCTSTR)strIns,vDispatch,adOpenKeyset,

adLockOptimistic,adCmdUnknown);

--------------------------------------------------------------------------------

7.得到listctrl中所有选中行的序号

方法一:

CStringstr;

for(inti=0;i

{

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

{

str.Format(_T("选中了第%d行"),i);

AfxMessageBox(str);

}

}

方法二:

POSITIONpos=m_list.GetFirstSelectedItemPosition();

if(pos==NULL)

TRACE0("Noitemswereselected!

\n");

else

{

while(pos)

{

intnItem=m_list.GetNextSelectedItem(pos);

TRACE1("Item%dwasselected!

\n",nItem);

//youcoulddoyourownprocessingonnItemhere

}

}

--------------------------------------------------------------------------------

8.得到item的信息

TCHARszBuf[1024];

LVITEMlvi;

lvi.iItem=nItemIndex;

lvi.iSubItem=0;

lvi.mask=LVIF_TEXT;

lvi.pszText=szBuf;

lvi.cchTextMax=1024;

m_list.GetItem(&lvi);

--------------------------------------------------------------------------------

9.得到listctrl的所有列的header字符串内容

LVCOLUMNlvcol;

charstr[256];

intnColNum;

CStringstrColumnName[4];//假如有4列

nColNum=0;

lvcol.mask=LVCF_TEXT;

lvcol.pszText=str;

lvcol.cchTextMax=256;

while(m_list.GetColumn(nColNum,&lvcol))

{

strColumnName[nColNum]=lvcol.pszText;

nColNum;

}

--------------------------------------------------------------------------------

10.使listctrl中一项可见,即滚动滚动条

m_list.EnsureVisible(i,FALSE);

--------------------------------------------------------------------------------

11.得到listctrl列数

intnHeadNum=m_list.GetHeaderCtrl()->GetItemCount();

--------------------------------------------------------------------------------

12.删除所有列

方法一:

while(m_list.DeleteColumn(0))

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

方法二:

intnColumns=4;

for(inti=nColumns-1;i>=0;i--)

m_list.DeleteColumn(i);

--------------------------------------------------------------------------------

13.得到单击的listctrl的行列号

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

voidCTest6Dlg:

:

OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)

{

//方法一:

/*

DWORDdwPos=GetMessagePos();

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

m_list.ScreenToClient(&point);

LVHITTESTINFOlvinfo;

lvinfo.pt=point;

lvinfo.flags=LVHT_ABOVE;

intnItem=m_list.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!

=-1)

{

CStringstrtemp;

strtemp.Format("单击的是第%d行第%d列",

pNMListView->iItem,pNMListView->iSubItem);

AfxMessageBox(strtemp);

}

*/

*pResult=0;

}

--------------------------------------------------------------------------------

14.判断是否点击在listctrl的checkbox上

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

voidCTest6Dlg:

:

OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)

{

DWORDdwPos=GetMessagePos();

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

m_list.ScreenToClient(&point);

LVHITTESTINFOlvinfo;

lvinfo.pt=point;

lvinfo.flags=LVHT_ABOVE;

UINTnFlag;

intnItem=m_list.HitTest(point,&nFlag);

//判断是否点在checkbox上

if(nFlag==LVHT_ONITEMSTATEICON)

{

AfxMessageBox("点在listctrl的checkbox上");

}

*pResult=0;

}

--------------------------------------------------------------------------------

15.右键点击listctrl的item弹出菜单

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

voidCTest6Dlg:

:

OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult)

{

NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;

if(pNMListView->iItem!

=-1)

{

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);

}

*pResult=0;

}

--------------------------------------------------------------------------------

16.item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序

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

voidCTest6Dlg:

:

OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult)

{

NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;

//TODO:

Addyourcontrolnotificationhandlercodehere

CStringsTemp;

if((pNMListView->uOldState&LVIS_FOCUSED)==LVIS_FOCUSED&&

(pNMListView->uNewState&LVIS_FOCUSED)==0)

{

sTemp.Format("%dlostedfocus",pNMListView->iItem);

}

elseif((pNMListView->uOldState&LVIS_FOCUSED)==0&&

(pNMListView->uNewState&LVIS_FOCUSED)==LVIS_FOCUSED)

{

sTemp.Format("%dgotfocus",pNMListView->iItem);

}

if((pNMListView->uOldState&LVIS_SELECTED)==LVIS_SELECTED&&

(pNMListView->uNewState&LVIS_SELECTED)==0)

{

sTemp.Format("%dlostedselected",pNMListView->iItem);

}

elseif((pNMListView->uOldState&LVIS_SELECTED)==0&&

(pNMListView->uNewState&LVIS_SELECTED)==LVIS_SELECTED)

{

sTemp.Format("%dgotselected",pNMListView->iItem);

}

*pResult=0;

}

--------------------------------------------------------------------------------

17.listctrl的subitem添加图标

注意:

首先要用InsertItem()插入一行的第一列,然后才能用SetItem设置其他项

m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);

m_userlist.SetItem(..);

--------------------------------------------------------------------------------

18.在CListCtrl显示文件,并根据文件类型来显示图标

网上找到的代码,自己试用并改正过,share

步骤1:

设置list的图像列表为系统图像列表

BOOLSetSystemImageList(CListCtrl&list)

{

HIMAGELISThimlSmall;

HIMAGELISThimlLarge;

SHFILEINFOsfi;

charcSysDir[MAX_PATH];

CStringstrBuf;

memset(cSysDir,0,MAX_PATH);

GetWindowsDirectory(cSysDir,MAX_PATH);

strBuf=cSysDir;

//SHGetFileInfo:

//IfuFlagscontainsSHGFI_SYSICONINDEX,thereturnvalueisahandleto

//animagelistthatcontainsthelargeiconimages.

//IfSHGFI_SMALLICONisincludedwithSHGFI_SYSICONINDEX,thereturnvalue

//isthehandletoanimagelistthatcontainsthesmalliconimages.

//

himlSmall=(HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,

0,

&sfi,

sizeof(SHFILEINFO),

SHGFI_SYSICONINDEX|SHGFI_SMALLICON);

himlLarge=(HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,

0,

&sfi,

sizeof(SHFILEINFO),

SHGFI_SYSICONINDEX|SHGFI_LARGEICON);

if(himlSmall&&himlLarge)

{

:

:

SendMessage(list.m_hWnd,LVM_SETIMAGELIST,

(WPARAM)LVSIL_SMALL,(LPARAM)himlSmall);

:

:

SendMessage(list.m_hWnd,LVM_SETIMAGELIST,

(WPARAM)LVSIL_NORMAL,(LPARAM)himlLarge);

}

returnTRUE;

}

步骤2:

给列表添加指定的文件,同时获得该文件的的图标索引,给list添加图标

intGetIconIndex(LPCTSTRlpszPath,BOOLbIsDir,BOOLbSelected);//向前声明

voidAddFiles(CListCtrl&list,LPCTSTRlpszFileName,BOOLbAddToDocument)

{

intnIcon=GetIconIndex(lpszFileName,FALSE,TRUE);

CStringstrSize;

CFileFindfilefind;

//getfilesize

if(filefind.FindFile(lpszFileName))

{

filefind.FindNextFile();

strSize.Format("%d",filefind.GetLength());

}

else

strSize="0";

//splitpathandfilename

CStringstrFileName=lpszFileName;

CStringstrPath;

intnPos=strFileName.ReverseFind('\\');

if(nPos!

=-1)

{

strPath=strFileName.Left(nPos);

strFileName=strFileName.Mid(nPos1);

}

//inserttolist

intnItem=list.GetItemCount();

//list.InsertItem(nItem,strFileName,nIcon);

//list.SetItemText(nItem,1,strSize);

//

//此处可以根据实际需要修改代码

//

}

--------------------------------------------------------------------------------

19.listctrl内容进行大数据量更新时,避免闪烁

m_list.SetRedraw(FALSE);

//更新内容

m_list.SetRedraw(TRUE);

m_list.Invalidate();

m_list.UpdateWindow();

20.清除ListCtrl以重新初始化:

//删除所有行

m_ctrllist.DeleteAllItems();

//删除所有列

intiColCount=m_ctrllist.GetHeaderCtrl()->GetItemCount();

//方法1

//原理:

删除第一列后,其他列向前移动

while(m_ctrllist.DeleteColumn(0));

//方法2

for(inti=0;i

{

m_ctrllist.DeleteColumn(0);

}

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

当前位置:首页 > 小学教育 > 英语

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

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