关于clistctrl怎么选中指定的列,怎么让所有列都不选中

关于clistctrl怎么选中指定的列,怎么让所有列都不选中,第1张

clistctrl怎么选中指定的列,怎么让所有列都不选中?在线等

------Solutions------

怎么取消选中的项?

------Solutions------

SetItemState(int nItem,UNIT nState,UNIT nMask)

------Solutions------

SetItemState(nItem, 0, LVIS_SELECTED)

------Solutions------

选中为:SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED)

全部选中做一个循环就可以了,

取消选中用SetItemState(nItem,0, LVIS_SELECTED)

------Solutions------

// 响应LVN_COLUMNCLICK消息,遍历CListCtrl中所有的Item,然后设置状态

// 初始化OnInitDailog函数中:

m_list.ModifyStyle(0, LVS_REPORT|LVS_SHOWSELALWAYS)

m_list.SetExtendedStyle(/*LVS_EX_FULLROWSELECT |*/ LVS_EX_GRIDLINES)

m_list.InsertColumn(0, _T("AAA"), LVCFMT_LEFT, 100)

m_list.InsertColumn(1, _T("BBB"), LVCFMT_LEFT, 100)

m_list.InsertColumn(2, _T("CCC"), LVCFMT_LEFT, 100)

CString strText(_T(""))

for(int i=0i<10i++)

{

strText.Format(_T("Index: %d"), i)

m_list.InsertItem(i, _T(""))

m_list.SetItemText(i, 0, strText)

m_list.SetItemText(i, 1, strText)

m_list.SetItemText(i, 2, strText)

}

// LVN_COLUMNCLICK消息响应函数

void CXXDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)

{

NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR

// TODO: Add your control notification handler code here

int nCount = m_list.GetItemCount()

int nSubItem = pNMListView->iSubItem

for(int i=0i<nCounti++)

{

m_list.SetItem(i, nSubItem, LVIF_STATE, NULL, 0, LVIS_SELECTED, LVIS_SELECTED, 0)

}

*pResult = 0

}

------Solutions------

SetItemState是设置某一行的状态,当然他也可以设置列,但是只能是第一列

1.使用SetRedraw禁止窗口重绘, *** 作完成后,再恢复窗口重绘\x0d\x0am_ctlList.SetRedraw(FALSE)\x0d\x0a//以下为更新数据 *** 作\x0d\x0a//??\x0d\x0a//恢复窗口重绘\x0d\x0am_ctlList.SetRedraw(TRUE)\x0d\x0a2.使用LockWindowUpdate禁止窗口重绘, *** 作完成后,用UnlockWindowUpdate恢复窗口重绘\x0d\x0am_ctlList.LockWindowUpdate()\x0d\x0a//以下为更新数据 *** 作\x0d\x0a//??\x0d\x0a//恢复窗口重绘\x0d\x0am_ctlList.UnlockWindowUpdate()\x0d\x0a3.使用ListCtrl的内部双缓冲\x0d\x0am_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()|LVS_EX_DOUBLEBUFFER)\x0d\x0aVC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,如下:\x0d\x0a#define LVS_EX_DOUBLEBUFFER 0x00010000\x0d\x0a4.Virtual List\x0d\x0a首先要设置ListCtrl风格为LVS_REPORT | LVS_OWNERDATA或在ListCtrl属里中的More Styles页面中选中Owner data复选框。\x0d\x0a其次要向应LVN_GETDISPINFO消息;\x0d\x0avoid OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)\x0d\x0a{\x0d\x0a LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR\x0d\x0a LV_ITEM *pItem = &(pDispInfo)->item\x0d\x0a char szText[128] = {0}\x0d\x0a if (pItem->mask &LVIF_TEXT)\x0d\x0a {\x0d\x0a//使缓冲区数据与表格子项对应\x0d\x0a//m_ArrayBuff为二维数组\x0d\x0a//定义如下 int m_ArrayBuff[2048][4]\x0d\x0a _stprintf(szText,_T("%d"),m_ArrayBuff[pItem->iItem][pItem->iSubItem]) \x0d\x0a pItem->pszText = szText \x0d\x0a } \x0d\x0a *pResult = 0\x0d\x0a}\x0d\x0a最后便是生成缓冲区数据\x0d\x0avoid Insertdata()\x0d\x0a{\x0d\x0a //删除之前的数据\x0d\x0a m_ctlList.SetItemCountEx(0)\x0d\x0a m_ctlList.Invalidate()\x0d\x0am_ctlList.UpdateWindow()\x0d\x0a srand( (unsigned)time( NULL ))\x0d\x0a \x0d\x0a //生成新的数据缓冲区\x0d\x0a int nItemCount = 2048\x0d\x0a for (int i = 0i GetWindowRect(&headerRect) \x0d\x0aMenDC.CreateCompatibleDC(&dc) \x0d\x0aMemMap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height())\x0d\x0aMenDC.SelectObject(&MemMap)\x0d\x0aMenDC.FillSolidRect(&rect,RGB(228,236,243)) \x0d\x0a//这一句是调用默认的OnPaint(),把图形画在内存DC表上 \x0d\x0aDefWindowProc(WM_PAINT,(WPARAM)MenDC.m_hDC,(LPARAM)0) \x0d\x0a//输出 \x0d\x0adc.BitBlt(0,headerRect.Height(),rect.Width(), rect.Height(),&MenDC,0, headerRect.Height(),SRCCOPY) \x0d\x0aMenDC.DeleteDC()\x0d\x0aMemMap.DeleteObject()\x0d\x0a}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11026869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存