线程中使用ListCtrl SetItemText后不显示
问题描述:在线程中动态的为ListCtrl添加行,但是添加失败,高手帮忙看看原因。
代码如下:
int i = pUserRegist->GetItemCount(); //获取ListCtrl中已经添加的行
pUserRegist->InsertItem(i+1,_T(""));
BOOL FLAG = pUserRegist->SetItemText(i+1,0,_T("测试1"));
pUserRegist->SetItemText(i+1,1,_T("测试2"));
pUserRegist->SetItemText(i+1,2,_T("测试3"));
pUserRegist->SetItemText(i+1,3,_T("测试4"));
ListCtrl的风格设置如下:
LVS_REPORT,LVS_SHOWSELALWAYS,LVS_EX_GRIDLINES,LVS_EX_FULLROWSELECT。
调试时发现,FLAG的值总是0,实际上运行时是有一个空白行添加.
[解决办法]
你这个程序的问题我认为关键是在那个"i+1",举个例子,如果你添加前,列表中有1项,那么GetItemCount()后i就=1,这里你调用InsertItem(i+1,_T(""));就是在i+1=2,也就是第3行插入一行(注意:这里索引是0开始的).这个时候是没有问题的,但是后面的pUserRegist->SetItemText(i+1,3,_T("测试4"));这句就会有问题了.因为现在只有 第0行,和第1行,并没有第2行,这个函数就会失败,所以只有加入了一个空白行.
程序修改成这样:
int i = pUserRegist->GetItemCount(); //获取ListCtrl中已经添加的行 pUserRegist->InsertItem(i,_T(""));//i+1变成i 下同BOOL FLAG = pUserRegist->SetItemText(i+1,0,_T("测试1"));pUserRegist->SetItemText(i,1,_T("测试2"));pUserRegist->SetItemText(i,2,_T("测试3"));pUserRegist->SetItemText(i,3,_T("测试4"));