分类: C/C++
2011-11-17 16:24:01
设置LVS_EX_CHECKBOXES风格
ListView_SetExtendedListViewStyle(m_List.GetSafeHwnd(), m_List.GetExStyle() | LVS_EX_CHECKBOXES);
为listctrl添加测试项
在OnInitDialog()中添加如下代码:
m_List.InsertColumn(0,"Name",LVCFMT_LEFT,150);
m_List.InsertColumn(1,"***",LVCFMT_LEFT,200);
m_List.InsertItem(0, "ZhangSan");
m_List.InsertItem(1, "LiSi");
添加控件通知消息
为ListCtrl控件添加LVN_ITEMCHANGED消息。系统生成如下代码:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); // TODO: Add your control notification handler code here *pResult = 0; } 在LVN_ITEMCHANGED消息处理函数中添加代码如下: void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); // TODO: Add your control notification handler code here /* typedef struct tagNMLISTVIEW { NMHDR hdr; int iItem; int iSubItem; UINT uNewState; UINT uOldState; UINT uChanged; POINT ptAction; LPARAM lParam; } NMLISTVIEW, *LPNMLISTVIEW; */ if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */ && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */ ) { TRACE("Item %d is checked\n", pNMLV->iItem); } else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */ && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */ ) { TRACE("Item %d is unchecked\n", pNMLV->iItem); } else { TRACE("Item %d does't change the check-status\n", pNMLV->iItem); } *pResult = 0; }
1 void CGspSellerDocPage2::refreshList() 2 { 3 this->UpdateData(); 4 this->m_strProduct.TrimLeft();this->m_strProduct.TrimRight(); 5 this->m_strWareType.TrimRight(); 6 this->m_strSpec.TrimLeft();this->m_strSpec.TrimRight(); 7 this->m_strModel.TrimLeft();this->m_strModel.TrimRight(); 8 this->m_strManufactor.TrimLeft();this->m_strManufactor.TrimRight(); 9 10 m_ctrlList.DeleteAllItems(); 11 GspSellerFilter filter; 12 13 for (vector<GspSellerRangeListItem>::iterator iter = this->dataSource.begin(); iter != this->dataSource.end(); iter++) 14 { 15 if(!this->m_strProduct.IsEmpty() && (iter->strWareCode.Find(this->m_strProduct) == -1 && iter->strWareName.Find(this->m_strProduct) == -1)) 16 { 17 continue; 18 } 19 if(!this->m_strSpec.IsEmpty() && iter->strSpec.Find(this->m_strSpec) == -1) 20 { 21 continue; 22 } 23 if(!this->m_strWareType.IsEmpty() && iter->strWareType.Find(this->m_strWareType) == -1) 24 { 25 continue; 26 } 27 if(!this->m_strModel.IsEmpty() && iter->strModel.Find(this->m_strModel) == -1) 28 { 29 continue; 30 } 31 if(!this->m_strManufactor.IsEmpty() && iter->strProducter.Find(this->m_strManufactor) == -1) 32 { 33 continue; 34 } 35 36 int iIndex = m_ctrlList.GetItemCount(); 37 m_ctrlList.InsertItem(iIndex, iter->strWareType); 38 m_ctrlList.SetItemText(iIndex, 1, iter-> strWareCode); 39 m_ctrlList.SetItemText(iIndex, 2, iter->strWareName); 40 m_ctrlList.SetItemText(iIndex, 3, iter->strProducter); 41 m_ctrlList.SetItemText(iIndex, 4, iter->strSpec); 42 m_ctrlList.SetItemText(iIndex, 5, iter->strModel); 43 m_ctrlList.SetItemText(iIndex, 6, iter->strUnit); 44 45 if (iter->strCheck == _T("1")) m_ctrlList.SetCheck(iIndex, 1); 46 } 47 }
void CGspSellerDocPage2::OnItemchangedListWareRange(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMLV = (NM_LISTVIEW*)pNMHDR; CString strWareCode = m_ctrlList.GetItemText(pNMLV->iItem, 1); GspSellerRangeListItem *rowItem = NULL; for(int i=0;i<this->dataSource.size();i++) { if(strWareCode == this->dataSource[i].strWareCode) { rowItem = &this->dataSource[i]; break; } } // TODO: Add your control notification handler code here if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */ && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */ ) { //TRACE("Item %d is checked\n", pNMLV->iItem); if(rowItem != NULL) rowItem->strCheck = "1"; } else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */ && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */ ) { //TRACE("Item %d is unchecked\n", pNMLV->iItem); if(rowItem != NULL) rowItem->strCheck = "0"; } else { TRACE("Item %d does't change the check-status\n", pNMLV->iItem); } *pResult = 0; }