ListCtrl控件的风格设置Word文档下载推荐.docx
《ListCtrl控件的风格设置Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ListCtrl控件的风格设置Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
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<
m_list.GetItemCount();
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;
Open((LPCTSTR)strIns,vDispatch,adOpenKeyset,
adLockOptimistic,adCmdUnknown);
7.得到listctrl中所有选中行的序号
方法一:
if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
选中了第%d行"
方法二:
POSITIONpos=m_list.GetFirstSelectedItemPosition();
if(pos==NULL)
TRACE0("
Noitemswereselected!
\n"
);
else
while(pos)
intnItem=m_list.GetNextSelectedItem(pos);
TRACE1("
Item%dwasselected!
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!
pNMListView->
iItem,pNMListView->
iSubItem);
*pResult=0;
14.判断是否点击在listctrl的checkbox上
UINTnFlag;
intnItem=m_list.HitTest(point,&
nFlag);
//判断是否点在checkbox上
if(nFlag==LVHT_ONITEMSTATEICON)
AfxMessageBox("
点在listctrl的checkbox上"
15.右键点击listctrl的item弹出菜单
添加listctrl控件的NM_RCLICK消息相应函数
OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult)
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);
16.item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序
添加listctrl控件的LVN_ITEMCHANGED消息相应函数
OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult)
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringsTemp;
if((pNMListView->
uOldState&
LVIS_FOCUSED)==LVIS_FOCUSED&
&
(pNMListView->
uNewState&
LVIS_FOCUSED)==0)
sTemp.Format("
%dlostedfocus"
pNMListView->
iItem);
elseif((pNMListView->
LVIS_FOCUSED)==0&
LVIS_FOCUSED)==LVIS_FOCUSED)
%dgotfocus"
LVIS_SELECTED)==LVIS_SELECTED&
LVIS_SELECTED)==0)
%dlostedselected"
LVIS_SELECTED)==0&
LVIS_SELECTED)==LVIS_SELECTED)
%dgotselected"
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,
sfi,
SHGFI_SYSICONINDEX|SHGFI_LARGEICON);
if(himlSmall&
himlLarge)
:
SendMessage(list.m_hWnd,LVM_SETIMAGELIST,
(WPARAM)LVSIL_SMALL,(LPARAM)himlSmall);
(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());
strSize="
0"
//splitpathandfilename
CStringstrFileName=lpszFileName;
CStringstrPath;
intnPos=strFileName.ReverseFind('
\\'
if(nPos!
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<
iColCount;
m_ctrllist.DeleteColumn(0);