在使用list ctrl的LVN_INSERTITEM这个消息时,要得到某行某列的数据,比如0行1列,却得不到.请问是什么原因,代码如下:
void CCalcCostDlg::OnInsertitemList(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
nCount = m_list.GetItemCount();         //这里可以得到nCount的数量
char buf[32] = "";
int sum = 0;
for(int i = 0; i < nCount; ++i)
{
memset(buf,0,sizeof(buf));
m_list.GetItemText(i,1,buf,sizeof(buf));//这里的buf为空,得不到数据
sum +=atoi(buf);
}
*pResult = 0;
}

解决方案 »

  1.   

    CString _str=m_listCtrl.GetItemText(i,1);
      

  2.   

    产生LVN_INSERTITEM通知的时候,只有第0个子项是有数据的,其余都是空的,所以GetItemText(i,1……取到的也是空的。
      

  3.   

    这个问题很简单:
    你是在OnInsertitemList这个函数中写代码的,你要搞清楚这个函数是在什么时候被调用的,其实这个函数是在List执行InsertItem时就会被调用,而此时子条目还没有被插入进去啊~~ (就是用SetItemText()插入子条目),所以当然是空的了@_@你可以把一下这句话:
    m_list.GetItemText(i,1,buf,sizeof(buf));//这里的buf为空,得不到数据 改为:m_list.GetItemText(i,0,buf,sizeof(buf));
    得到0行0列就有数据了... 
      

  4.   

    如果要处理子项的变化,应该响应LVN_ITEMCHANGED通知。
      

  5.   

    明白了,还有一问就结贴,其实我是想在当我每插入一条数据的时候,就统计所有的列的数据之和,结果用
    LVN_INSERTITEM和LVN_ITEMCHANGED这两个都不行..........
      

  6.   

    Update也没有用....其实在其它时候可以得出.不过用这几个消息的话,在里面却发现怎么都得不到数据..可能是和5楼说的那个原因一样..
      

  7.   

    LVN_ITEMCHANGED通知中会指出是哪个子项改变。参考MSDN中LVN_ITEMCHANGED的说明。
      

  8.   

    TKS,用了其它办法,LVN_ITEMCHANGED中先得到ITEM,再找子项就行了