CListCtrl如何在选中CheckBox时同时选中相应Item

i_love_star 2004-07-09 02:54:46
CListCtrl为Report式样(单选)
//我的想法是ListCtrl选择发生变化时,先把所有选项置为未选中
//然后把pNMListView>iItem对应的置为选中
//代码如下,虽能实现此功能但效率很低
//Item很多时,速度非常慢
void CXXXDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
int nCount = m_List.GetItemCount();
for(int i=0;i<nCount;i++)
//注意:以下设置Item为未选中,会继续引发OnItemChangedList
//时间都在这浪费了
m_List.SetItemState(i,0,LVIS_SELECTED);
m_List.SetItemState (pNMListView>iItem,LVIS_SELECTED,LVIS_SELECTED);)
*pResult = 0;
}

...全文
443 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_love_star 2004-07-09
  • 打赏
  • 举报
回复
ok,问题已解决,谢谢各位
kongyunzhongque 2004-07-09
  • 打赏
  • 举报
回复
去除所有选中

CListCtrl * pLC =(CListCtrl *)GetDlgItem(IDC_LIST2);
POSITION pos;
int nItem;
pos =pLC->GetFirstSelectedItemPosition();
while(pos)
{
nItem =pLC->GetNextSelectedItem(pos);
pLC->SetItemState(nItem,0,LVIS_SELECTED);
}

在鼠标点击一个CListCtrl的列表项的Check方框时获得鼠标的点击消息

OnClickList2(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW lpNMListView = (LPNMLISTVIEW) pNMHDR ;
UINT flag ;
int nItem =m_ListCtrl->HitTest( lpNMListView->ptAction, &flag ) ;
if( flag & LVHT_ONITEMSTATEICON )
{
// MessageBox( "Hitted" ) ;
m_ListCtrl->SetItem(nItem, 0, LVIF_STATE, NULL, 0, LVIS_SELECTED,
LVIS_SELECTED, 0);
}
daxiao888 2004-07-09
  • 打赏
  • 举报
回复
最好重写setcheck(),很简单
if(hitTest())
{ }
else
{ }
快乐鹦鹉 2004-07-09
  • 打赏
  • 举报
回复
OnClick中可以用以下方法判断点中哪一格
用SubItemHitTest获取ListCtrl中选中的行列号
void CMyListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);

LVHITTESTINFO info;
info.pt = pt;
info.flags = LVM_SUBITEMHITTEST ;
int i= SubItemHitTest(&info);

*pResult = 0;
}
可以稍做修改,比如判断info中是否点中的第一列,并且是否在第一列中的checkbox的区域上
快乐鹦鹉 2004-07-09
  • 打赏
  • 举报
回复
可以响应OnClick。然后用HitTest来判断。
i_love_star 2004-07-09
  • 打赏
  • 举报
回复
不知道有没有消息对应选中CheckBox时间,我用Spy++没找到
而且我的代码还有个小问题就是由于创建ListCtrl时,也会引发OnItemChangedList按照我的代码会设置选中最后一个
快乐鹦鹉 2004-07-09
  • 打赏
  • 举报
回复
可以用别的事件处理看看。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧