CListCtrl的click事件与itemchanged事件

xiaoluhelu 2015-12-08 03:34:39
1、CListCtrl添加了checkbox;
2、itemchanged事件:
void CtestDlg::OnLvnItemchangedFilelist(NMHDR *pNMHDR, LRESULT *pResult)//在这里对复选框的状态进行查询
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
USES_CONVERSION;

if(m_bHit)
{
m_bHit=FALSE;//复位
if(m_VideoList.GetCheck (m_itemSel))//m_itemSel是行号,checkbox选中
{
m_VideoList.SetItemText (m_itemSel,1,L"等待下载...");
}
//取消了checkbox框
else
{
m_VideoList.SetItemText(m_itemSel,1,L"");
}
}
*pResult = 0;
}
3、click事件:
void CtestDlg::OnNMClickFilelist(NMHDR *pNMHDR, LRESULT *pResult)//鼠标点击消息
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

USES_CONVERSION;
// TODO: Add your control notification handler code here
//单击所在的行号,找出鼠标位置
DWORD dwPos=GetMessagePos();
CPoint point(LOWORD(dwPos),HIWORD(dwPos));
m_VideoList.ScreenToClient (&point);

LVHITTESTINFO lvinfo;
lvinfo.pt =point;
//获取行号信息
int nItem=m_VideoList.HitTest (&lvinfo);
if(nItem!=-1)
{
m_itemSel=lvinfo.iItem ;//当前行号
}
//判断是否点击在checkbox上
if(lvinfo.flags =LVHT_ONITEMSTATEICON)//The position is over the state image of a list-view item.
m_bHit=TRUE;
*pResult = 0;
}

4、问题:当选择不同的复选框时,没有问题;若是只点击一个复选框,来回的勾选取消,相应的insert的text内容不显示,不知道是什么原因,大神们帮帮忙!谢谢!
...全文
208 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
信阳毛尖 2015-12-10
  • 打赏
  • 举报
回复
在你的这两个事件处理函数中都加一下锁,试试看结果如何
xiaoluhelu 2015-12-10
  • 打赏
  • 举报
回复
谢谢解答。 只有点击复选框时,m_bHit才会被置为true,在itemchanged事件中,有把m_bHit置为false的语句,但是一直在一个复选框上来回勾选,会出现问题,我把这个false语句删了,一直在一个复选框上来回勾选text内容会随时更新。虽然解决了问题,但是不太明白为什么
tiger波波 2015-12-08
  • 打赏
  • 举报
回复
没看出来要干啥,呵呵。 m_bHit貌似只有一个,但CheckBox有多个,能管得过来吗? 另m_bHit点一下变成真,再点一下貌似应该变成假,即:m_bHit = !m_bHit

15,979

社区成员

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

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