我的一个程序,以前在XP下运行一直正常,最近发现在Vista下则崩溃,跟踪发现问题出在虚拟列表(Virtual List Control)的使用上。在程序中我是用虚拟列表显示数据,可以肯定的是我的使用方法是没问题的,因为程序在XP下一直跑得很正常,可在Vista下却总是崩溃。假如说本来列表中应该显示200行,共8列,但是在Vista下只能显示出第一行,而且只显示前7列,最后一列显示不出来,然后程序就崩溃了。显示的代码大致如下:void CPidHistgramView::OnGetdispinfoList1(NMHDR* pNMHDR, LRESULT* pResult)
{
   LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
   LV_ITEM* pItem= &(pDispInfo->item);
        //得到当前项行的索引int iItemIndx= pItem->iItem; 
    
if (pItem->mask & LVIF_TEXT)   
{
 switch(pItem->iSubItem)
 {
                        
  case 0: 
     {
    lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn0);                
     }
      break;
  case 1:
    {
    lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn1);     }
     break;
 case 2: 
   {
     lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn2);   }
     break;
case 3: 
  {
     lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn3);  }
    break;
case 4: 
  {
     lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn4);  }
  break;
case 5: 
{
     lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn5);  }
  break;
case 6: 
  {
      lstrcpy(pItem->pszText,m_pidListInfo[iItemIndx].strColumn6);
    
  }
  break;
case 7: 
  {
    lstrcpy(pItem->pszText,"测试");
    
  }
  break;  default:
     break;   }
}  *pResult = 0;
}跟踪调试发现程序case 7:里lstrcpy(pItem->pszText,"测试")是被执行了的,但是列表中却没显示出来字段信息,而且执行完case 7后,按虚表的特性,程序就该再次进入到case 1中,显示下一行各列的信息。可现在程序崩溃了,请教一下高手,为什么会这样?