void CMp3TideDlg::OnNMDblclkList2(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
CString row, col;
row.Format("%d", pNMLV->iItem);
AfxMessageBox(row); *pResult = 0;
}为什么不论我双击哪里,都显示-1!!!(我想得到双击项所在的行号及列号)
if(index < 0) index =0 ;
dMzsf->pYaopin = ypdict.at(index);
OnOK();
消息函数:
{
*pResult = 0; CPoint point;
GetCursorPos( &point );
m_ListShow.ScreenToClient( &point );
LVHITTESTINFO info;
info.pt = point;
if ( m_ListShow.SubItemHitTest(&info) != -1 )
{
if ( (info.flags & LVHT_ONITEMLABEL) == 0 )
{
return;
}
info.iItem; // 行号
info.iSubItem;// 列号
}
}
这样的话,你只会在第一列双击的时候才是选中ITEM的状态.为了验证你获得的数据是否正确,你可以加一句:
LPNMLISTVIEW pNMLV = reinterpret_cast <LPNMLISTVIEW>(pNMHDR);
CString row, col;
row.Format("Item=%d ", pNMLV->iItem);
col.Format("SubItem=%d",pNMLV->iSubItem);
CString str=row+col;
AfxMessageBox(str); *pResult = 0;
这样看看SUBITEM对不对,就知道什么事了.
不过,添加上确实可以!但不是我本意·
那你的本意是什么?如果想点击后得到当前行,列,那设置了m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);有何不可?否则,你就要进行自已的扩展操作了,通过当前的POINT来确认当前的行,这样就麻烦多了.