在OnTimer里接收网络发来的数据,用了如下代码void CClientTest1Dlg::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default

if (nIDEvent == 1)
{
nLenSend = recvfrom(socket1,buf,1024,0,(SOCKADDR*)&sockaddr_in1,&nClientLen);
}

if (nLenSend != SOCKET_ERROR)
{
         //下面这样可以插入成功
//m_list.InsertItem(0, 0);//插入行
//m_list.SetItemText(0, 1, buf);         //下面这样插入,插入的都是空行,虽然看不到内容,但是鼠标单击时可以选中
m_list.SetItemText(m_list.GetItemCount(), 0);//设置数据
//m_list.InsertItem(m_list.GetItemCount(), , 0);//插入行
//m_list.SetItemText(m_list.GetItemCount(), , 1, buf);

}
else
{
MessageBox("0","0",MB_OK);
} CDialog::OnTimer(nIDEvent);
}注意上面的这几行:
         //下面这样插入,插入的都是空行,虽然看不到内容,但是鼠标单击时可以选中
m_list.SetItemText(m_list.GetItemCount(), 0);//设置数据
//m_list.InsertItem(m_list.GetItemCount(), , 0);//插入行
//m_list.SetItemText(m_list.GetItemCount(), , 1, buf);
为什么m_list.GetItemCount()不提示出错,但是就是不能正确插入列表呢。我的目的是把从网络收到的buf插入到列表控件最后面。

解决方案 »

  1.   

    SetItemText里面可以指定要插入的行号和列号啊。。
      

  2.   

    m_list.SetItemText(m_list.GetItemCount() - 1, 0);//设置数据
    //m_list.InsertItem(m_list.GetItemCount()- 1, , 0);//插入行
    //m_list.SetItemText(m_list.GetItemCount()- 1, , 1, buf); 
      

  3.   

    你用的什么版本哟,我在VS2008 编都编不过
    m_list.SetItemText(m_list.GetItemCount(), 0);
    都有两个参数呀你怎么过的。
      

  4.   


    int nIndex = m_list.GetItemCount();
    m_list.InsertItem(nIndex, "默认第一列");
    m_list.SetItemText(nIndex, 1, "二列");
    .
    .
    .
      

  5.   

    实在是没看明白什么意思   //下面这样插入,插入的都是空行,虽然看不到内容,但是鼠标单击时可以选中
    m_list.SetItemText(m_list.GetItemCount(), 0);//设置数据
    //m_list.InsertItem(m_list.GetItemCount(), , 0);//插入行
    //m_list.SetItemText(m_list.GetItemCount(), , 1, buf); 
    report 类型的必须先InsertItem,然后才能SetItemText
      
    直接 SetItemText是不行的 插入不成功 应该就会出现你说的情况
      

  6.   

    //m_list.InsertItem(m_list.GetItemCount(), , 0);//插入行
    //m_list.SetItemText(m_list.GetItemCount(), , 1, buf); 
    上面的m_list.GetItemCount()=0;,下面的m_list.GetItemCount()=1;
    应该
    int i=m_list.GetItemCount();
    m_list.InsertItem(i, 0);//插入行
    m_list.SetItemText(i, 1, buf); 
      

  7.   

    buf有东西吗? 下断点跟踪一下
      

  8.   

    先InsertItem,然后再SetItemText噻