请教,如何在listview中checkbox状态改变后获得消息? 有一listview,属性设置为LVS_EX_CHECKBOXES,现在我需要在鼠标click时获取checkbox状态,应该如何实现,在nm_click中好象checkbox状态还未改变.谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED && (pNMListView->uNewState & LVIS_SELECTED) == 0) { // sTemp.Format("%d losted selected",pNMListView->iItem); } else if((pNMListView->uOldState & LVIS_SELECTED) == 0 && (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED) { //sTemp.Format("%d got selected",pNMListView->iItem); if( m_list.GetCheck(pNMListView->iItem) ) { AfxMessageBox("选择"); } else { AfxMessageBox("未选择"); } } *pResult = 0;} 多谢DentistryDoctor(牙科医生),另外楼上的请教最外层的判断是什么用途,谢谢 感谢楼上的回答,我试了一下,好象点一下它会送过来好几次事件,而且状态有一样的,也有不一样的,而且item编号都一样,这就比较奇怪 给你完整的判断,自己研究一下吧。。什么时候失去焦点,什么时候得到焦点。以及得到选择,失去选择void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here CString sTemp; if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && (pNMListView->uNewState & LVIS_FOCUSED) == 0) { sTemp.Format("%d losted focus",pNMListView->iItem); } else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 && (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED) { sTemp.Format("%d got focus",pNMListView->iItem); } if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED && (pNMListView->uNewState & LVIS_SELECTED) == 0) { sTemp.Format("%d losted selected",pNMListView->iItem); } else if((pNMListView->uOldState & LVIS_SELECTED) == 0 && (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED) { sTemp.Format("%d got selected",pNMListView->iItem); } *pResult = 0;} 我试了一下,很正确,但是对check状态似乎没什么作用 其实,你可以直接用NM_CLICK就可以解决问题void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem != -1) { if(m_list.GetCheck(pNMListView->iItem)) AfxMessageBox("选中"); else AfxMessageBox("未选中"); } *pResult = 0;} click我试过的,它的缺陷在于收到消息的时候checkbox状态并未改变,不过我正在用你的代码做改造,成功马上结贴 求助 不能看自己回过的帖子,一进去就不停刷新页面 SQL问题! 我已经得到24位位图数据,二值化后怎么生成图片,我想查看一下效果 使用过JMAIL请进 CList类 有没有自己排序的方法?(子类或者其他类?) 如何使list ctrl中出现的表一样格式的数据能平均分它的宽度,使得数据一开始出现像表一样的,而不是使很多列的数据看不到,在线等 VC中的“Stact overflow”问题,请高手明示 急!如何使用自定义协议? 一个非常棘手的问题! 一个自制Wizard向导的问题,恳请高手帮忙! 这些地方该怎么写 C++ 中的 Singleton 实现
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == 0)
{
// sTemp.Format("%d losted selected",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
(pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
//sTemp.Format("%d got selected",pNMListView->iItem);
if( m_list.GetCheck(pNMListView->iItem) )
{
AfxMessageBox("选择");
}
else
{
AfxMessageBox("未选择");
}
}
*pResult = 0;
}
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString sTemp;
if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
(pNMListView->uNewState & LVIS_FOCUSED) == 0)
{
sTemp.Format("%d losted focus",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
(pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
{
sTemp.Format("%d got focus",pNMListView->iItem);
} if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == 0)
{
sTemp.Format("%d losted selected",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
(pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
sTemp.Format("%d got selected",pNMListView->iItem);
}
*pResult = 0;
}
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
if(m_list.GetCheck(pNMListView->iItem))
AfxMessageBox("选中");
else
AfxMessageBox("未选中");
} *pResult = 0;
}