我的一个程序,以前在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中,显示下一行各列的信息。可现在程序崩溃了,请教一下高手,为什么会这样?
{
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中,显示下一行各列的信息。可现在程序崩溃了,请教一下高手,为什么会这样?
解决方案 »
- vc调试器的quickwatch 在id数字 后面输入什么可以显示 对应的消息名称来着?
- WTL的对话框能不能使用菜单和工具栏?? 怎么使用??
- MFC grid control如何关联表格数据
- CString的输入
- 如何在使用 FillSolidRect 前保存原来的背景色,以便随时恢复?
- 紧急求救
- 如何在程序启动的时候设置RadioButton有效呢?
- ado 连接sqlserver的问题(解决就给分)
- Foxmail的帐户密码忘记了怎么办,里面有好多VC资料的信件,请大家帮忙!!!
- 难道在 WIN 2000 下就不能用 Visual C++ 吗??????
- 查找INI文本的内容(或者查找文本内容添加到LISTBOX)
- 大家有读脱产MBA的吗?离职前您的薪资是多少?
很多代码例子都是通过lstrcpy直接拷贝过去,但是msdn上的解释似乎要求用户分配内存的。http://msdn.microsoft.com/en-us/library/bb774760.aspx