VC 6 SDK Listcontrol 控件數(shù)據(jù)編輯及使用范例_第1頁
VC 6 SDK Listcontrol 控件數(shù)據(jù)編輯及使用范例_第2頁
VC 6 SDK Listcontrol 控件數(shù)據(jù)編輯及使用范例_第3頁
VC 6 SDK Listcontrol 控件數(shù)據(jù)編輯及使用范例_第4頁
VC 6 SDK Listcontrol 控件數(shù)據(jù)編輯及使用范例_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

VC6?0SDKListcontrol控件數(shù)據(jù)編輯2011-11-1318:58:06|分類:默認(rèn)分類|標(biāo)簽:|字號大中小訂閱實現(xiàn)步驟:1.VC6.0新建Win32Application工程文件ListtrlEdit,選擇"HelloWorld!"。在About對話框中添加Listcontrol控件ID為:IDC_LIST1,屬性修改如下:添加“確認(rèn)”按鈕ID為:IDB_BTOK,勾選Defaultbutton屬性

“取消”按鈕ID為:IDB_CANCEL“Edit”編輯框,ID為“IDC_EDIT1”,去掉Visible、Border屬性對號

將原“OK”按鈕改名為“退出”并去掉Defaultbutton屬性對號

兇兇}}}}RECTrect,rt;staticRECTltrt={50,65,500,310};switch(message){caseWM_NOTIFY:{pNMHDR=(NMHDR*)lParam;if(pNMHDR->code==NM_CLICK){::SetWindowText(hedit,"");

ShowWindow(hedit,SW_HIDE);}

if(pNMHDR->code==NM_DBLCLK){dblclkcell=true;

LPNMITEMACTIVATEtemp=(LPNMITEMACTIVATE)lParam;

iltem=temp->iltem;iSubItem=temp->iSubItem;intrownum=ListView_GetItemCount(hWndlist);〃返回行數(shù)intcolnum=Header_GetItemCount(ListView_GetHeader(hWndlist));〃返回列數(shù)

if(iSubItem==-1||iItem==-1)return0;ListView_GetItemText(hWndlist,iItem,iSubItem,szText,16);

ListView_GetSubItemRect(hWndlist,iItem,iSubItem,LVIR_LABEL,&rect);

if(iItem!=-1){rt.left=rect.left+ltrt.left+2;rt.top=rect.top+ltrt.top+1;rt.right=rect.right-rect.left-3;

rt.bottom=rect.bottom-rect.top;::SetWindowPos(hedit,HWND_TOP,〃改變窗口尺寸rt.left,rt.top,rt.right,rt.bottom,NULL);::ShowWindow(hedit,SW_SHOW);::SetFocus(hedit);::SetWindowText(hedit,szText);::SendMessage(hedit,EM_SETSEL,0,-1L);〃全選文本框文本return0;}caseWM_INITDIALOG:hWndlist=GetDlgItem(hDlg,IDC_LIST1);hedit=GetDlgItem(hDlg,IDC_EDIT1);::MoveWindow(hWndlist,ltrt.left,ltrt.top,ltrt.right,ltrt.bottom,NULL);SendMessage(hWndlist,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_GRIDLINES);Collnfo1.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_FMT;ColInfo1.iSubItem=0;Collnfo1.fmt=LVCFMT_CENTER;Collnfo1.cx=100;ColInfo1.pszText="商品名稱";ColInfo1.cchTextMax=50;Collnfo2.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_FMT;ColInfo2.iSubItem=0;Collnfo2.fmt=LVCFMT_CENTER;Collnfo2.cx=100;ColInfo2.pszText="編號";ColInfo2.cchTextMax=50;::SendMessage(hWndlist,LVM_INSERTCOLUMN,WPARAM(0),LPARAM(&ColInfo1));::SendMessage(hWndlist,LVM_INSERTCOLUMN,WPARAM(1),LPARAM(&ColInfo2));item.mask=LVIF_TEXT;item.pszText="電冰箱";item.iltem=0;item.iSubItem=0;::SendMessage(hWndlist,LVM_INSERTITEM,0,LPARAM(&item));item.mask=LVIF_TEXT;item.pszText="1234";item.iltem=0;item.iSubItem=1;::SendMessage(hWndlist,LVM_SETITEM,0,LPARAM(&item));item.mask=LVIF_TEXT;item.pszText="電視機(jī)";item.iltem=1;item.iSubItem=0;::SendMessage(hWndlist,LVM_INSERTITEM,0,LPARAM(&item));item.mask=LVIF_TEXT;item.pszText="2345";item.iltem=l;

item.iSubItem=l;::SendMessage(hWndlist,LVM_SETITEM,0,LPARAM(&item));

returnTRUE;caseWM_COMMAND:wmld=LOWORD(wParam);wmEvent=HIWORD(wParam);switch(wmld){caseIDOK:::SetWindowText(hedit,"");EndDialog(hDlg,LOWORD(wParam));returnTRUE;caseIDB_BTOK:if(iItem!=-1&&iSubItem!=-1){if(dblclkcell){::GetWindowText(hedit,szText,GetWindowTextLength(hedit)+1);LVITEMlvItem={0};lvItem.mask=LVIF_TEXT|LVCFMT_LEFT|LVCF_FMT;lvItem.iItem=iItem;lvItem.iSubItem=iSubItem;

lvItem.pszText=szText;::SendMessage(hWndlist,LVM_SETITEM,(WPARAM)0,(WPARAM)&lvItem);

::SetWindowText(hedit,"");ShowWindow(hedit,SW_HIDE);dblclkcell=false;}::SetFocus(hWndlist);}break;caseIDB_CANCEL:::SetWindowText(hedit,"");ShowWindow(hedit,SW_HIDE);::SetFocus(hWndlist);

returnTRUE;}6.運行,點擊“Help”->“About”,雙擊一個單元格效果如下;1.CListCtrl1.CListCtrl風(fēng)格LVS_ICON:為每個item顯示大圖標(biāo)1.CListCtrl1.CListCtrl風(fēng)格LVS_ICON:為每個item顯示大圖標(biāo)MFC如何使用ListControl以下未經(jīng)說明,listetri默認(rèn)view風(fēng)格為report相關(guān)類及處理函數(shù)MFC:CListCtrl類SDK:以“ListView_”開頭的一些宏。如ListView_lnsertColumn"),i);"),i);}LVS_SMALLICON:為每個item顯示小圖標(biāo)LVS_LIST:顯示一列帶有小圖標(biāo)的itemLVS_REPORT:顯示item詳細(xì)資料直觀的理解:windows資源管理器,“查看”標(biāo)簽下的“大圖標(biāo),小圖標(biāo),列表,詳細(xì)資料”設(shè)置listctrl風(fēng)格及擴(kuò)展風(fēng)格LONGlStyle;lStyle=GetWindowLong(m_list.m_hWnd,GWL_STYLE);//獲取當(dāng)前窗口stylelStyle&=~LVS_TYPEMASK;//清除顯示方式位lStyle|=LVS_REPORT;//設(shè)置styleSetWindowLong(m_list.m_hWnd,GWL_STYLE,IStyle);//設(shè)置styleDWORDdwStyle=m_list.GetExtendedStyle();dwStyle|=LVS_EX_FULLROWSELECT;〃選中某行使整行高亮(只適用與report風(fēng)格的listctrl)dwStyle|=LVS_EX_GRIDLINES;〃網(wǎng)格線(只適用與report風(fēng)格的listctrl)dwStyle|=LVS_EX_CHECKBOXES;//item前生成checkbox控件m_list.SetExtendedStyle(dwStyle);//設(shè)置擴(kuò)展風(fēng)格插入數(shù)據(jù)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”);//設(shè)置數(shù)據(jù)—直選中item選中style中的Showselectionalways,或者在上面第2點中設(shè)置LVS_SHOWSELALWAYS選中和取消選中—行intnIndex=0;//選中m_list.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);0,//取消選中0,m_list.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED);得到listctrl中所有行的checkbox的狀態(tài)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為選中狀態(tài)AfxMessageBox(str);得到listctrl中所有選中行的序號—^―、亠方法一:CStringstr;for(inti=0;i{if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED){str.Format(_T("選中了第%d行"),i);nbsp;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}}}得到item的信息TCHARszBuf[1024];LVITEMlvi;lvi.iItem=nItemIndex;lvi.iSubItem=0;lvi.mask=LVIF_TEXT;lvi.pszText=szBuf;lvi.cchTextMax=1024;m_list.GetItem(&lvi);關(guān)于得到設(shè)置item的狀態(tài),還可以參考msdn文章Q173242:UseMaskstoSet/GetItemStatesinCListCtrl/kb/173242/en-us得到listctrl的所有列的header字符串內(nèi)容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++;使listctrl中一項可見,即滾動滾動條m_list.EnsureVisible(i,FALSE);得到listctrl列數(shù)intnHeadNum=m_list.GetHeaderCtrl()->GetItemCount();刪除所有列方法一:while(m_list.DeleteColumn(0))因為你刪除了第一列后,后面的列會依次向上移動方法二:intnColumns=4;for(inti=nColumns-1;i>=0;i--)m_list.DeleteColumn(i);得到單擊的listctrl的行列號添加listctrl控件的NM_CLICK消息相應(yīng)函數(shù)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);}//方法二:pNMListView/*NM_LISTVIEW*(NM_LISTVIEW*)pNMHDR;pNMListViewif(pNMListView->iItem!=-1){CStringstrtemp;strtemp.Format(單擊的是第%d行第%d列",pNMListView->iItem,pNMListView->iSubItem);AfxMessageBox(strtemp);}*/*pResult=0;判斷是否點擊在listctrl的checkbox上添加listctrl控件的NM_CLICK消息相應(yīng)函數(shù)voidCTest6Dlg::OnClickList1(NMHDR*pNMHDR,LRESULT*pResult){DWORDdwPos=GetMessagePos();CPointpoint(LOWORD(dwPos),HIWORD(dwPos));m_list.ScreenToClient(&point);LVHITTESTINFOlvinfo;nbsp;lvinfo.pt=point;lvinfo.flags=LVHT_ABOVE;UINTnFlag;intnItem=m_list.HitTest(point,&nFlag);//判斷是否點在checkbox上if(nFlag==LVHT_ONITEMSTATEICON){AfxMessageBox("點在listetri的checkbox上");}*pResult=0;}添加listctrl控件的右鍵點擊listctrl的添加listctrl控件的NM_RCLICK消息相應(yīng)函數(shù)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;}item切換焦點時(包括用鍵盤和鼠標(biāo)切換item時),狀態(tài)的一些變化順序添加listctrl控件的LVN_ITEMCHANGED消息相應(yīng)函數(shù)voidCTest6Dlg::OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult){NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;//TODO:AddyourcontrolnotificationhandlersTemp.Format("%dsTemp.Format("%dgotsTemp.Format("%dsTemp.Format("%dgotcodehereCStringsTemp;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){selected",pNMListView->iItem);}*pResult=0;}得到另一個進(jìn)程里的listctrl控件的item內(nèi)容/threads/int64_memsteal.asp選中l(wèi)istview中的itemQ131284:HowToSelectaListviewItemProgrammatically/kb/131284/en-us如何在CListView中使用CListCtrl的派生類/cpp/controls/listview/introduction/article.php/c919/listctrl的subitem添加圖標(biāo)m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);m_list.SetItem(..);//具體參數(shù)請參考msdn在CListCtrl顯示文件,并根據(jù)文件類型來顯示圖標(biāo)網(wǎng)上找到的代碼,shareBOOLCTest6Dlg::OnInitDialog(){CDialog::OnInitDialog();HIMAGELISThimlSmall;HIMAGELISThimlLarge;SHFILEINFOsfi;charcSysDir[MAX_PATH];StringstrBuf;memset(cSysDir,0,MAX_PATH);GetWindowsDirectory(cSysDir,MAX_PATH);strBuf=cSysDir;sprintf(cSysDir,"%s",strBuf.Left(strBuf.Find("\\")+1));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(m_list.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_SMALL,(LPARAM)himlSmall);::SendMessage(m_list.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_NORMAL,(LPARAM)himlLarge);}returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCTest6Dlg::AddFiles(LPCTSTRlpszFileName,BOOLbAddToDocument){intnIcon=GetIconIndex(lpszFileName,FALSE,FALSE);CStringstrSize;CFileFindfilefind;//getfilesizeif(filefind.FindFile(lpszFileName)){filefind.FindNextFile();strSize.Format("%d",filefind.GetLength());}elsestrSize="0";//splitpathandfilenameCStringstrFileName=lpszFileName;CStringstrPath;intnPos=strFileName.ReverseFind('\\');if(nPos!=-1){strPath=strFileName.Left(nPos);strFileName=strFileName.Mid(nPos+1);}//inserttolistintnItem=m_list.GetItemCount();m_list.InsertItem(nItem,strFileName,nIcon);m_list.SetItemText(nItem,1,strSize);m_list.SetItemText(nItem,2,strFileName.Right(3));m_list.SetItemText(nItem,3,strPath);}intCTest6Dlg::GetIconIndex(LPCTSTRlpszPath,BOOLbIsDir,BOOLbSelected){SHFILEINFOsfi;memset(&sfi,0,sizeof(sfi));if(bIsDir){SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_DIRECTORY,&sfi,sizeof(sfi),SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_USEFILEATTRIBUTES|(bSelected?SHGFI_OPENICON:0));returnsfi.iIcon;}else{SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_USEFILEATTRIBUTES|(bSelected?SHGFI_OPENICON:0));returnsfi.iIcon;}return-1;}listctrl內(nèi)容進(jìn)行大數(shù)據(jù)量更新時,避免閃爍m_list.SetRedraw(FALSE);//更新內(nèi)容m_list.SetRedraw(TRUE);m_list.Invalidate();m_list.Updat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論