问题描述:将CListCtrl无法正常显示数据,第一次显示数据时完全正常,第二次显示数据时,控件不显示数据,利用强制刷新也不行。经调试发现,数据已经写入CListCtrl控件内存,只是因为某种原因无法呈现出来。
原因:第一次显示数据之后,首先清空了控件中的所有记录,然后清空了所有的标题条目;在下一次数据显示之前,重新初始化标题栏,添加记录。清空标题栏的代码注释掉之后,数据就能正常显示了。
解决方案:在第一次为控件增加标题之后,不再动态增删标题,对标题修改显示即可。具体代码如下:
void CCXXXView::OnInitialUpdate(){
CListView::OnInitialUpdate();
//设置样式
CListCtrl &List = GetListCtrl();
#ifdef _DEBUG
long lStyle = GetWindowLong(List.GetSafeHwnd(), GWL_STYLE);
//long lStyle = GetWindowLong(List.m_hWnd, GWL_STYLE);
lStyle&=~LVS_TYPEMASK;
lStyle|= (LVS_REPORT);
//lStyle |= (LVS_REPORT|LVS_SHOWSELALWAYS);
SetWindowLong(List.m_hWnd, GWL_STYLE, lStyle);
DWORD dwExStyle = List.GetExtendedStyle();
//dwExStyle |= (LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
dwExStyle |= (LVS_EX_FULLROWSELECT );
List.SetExtendedStyle(dwExStyle);
#else
//DWORD dwStyle = GetWindowLong(List.GetSafeHwnd(), GWL_STYLE);
long lStyle = GetWindowLong(List.GetSafeHwnd(), GWL_STYLE);
//dwStyle |= (LVS_REPORT);
lStyle |= (LVS_REPORT|LVS_SHOWSELALWAYS);
SetWindowLong(List.GetSafeHwnd(), GWL_STYLE, lStyle);
DWORD dwExStyle = List.GetExtendedStyle();
dwExStyle |= (LVS_EX_FULLROWSELECT );
List.SetExtendedStyle(dwExStyle);
#endif
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
}
void CCXXXView::ResetListCtrl( int nselItem )
{
ClearListHeader();
InitListHeader( nselItem );
}
void CCXXXView::ClearListHeader()
{
CListCtrl &List = GetListCtrl();
List.DeleteAllItems();
//CHeaderCtrl *clch = List.GetHeaderCtrl();
//if( clch != NULL )
//{
// int nItem = clch->GetItemCount();
// for( int i = nItem - 1; i >= 0; i-- )
// {
// clch->DeleteItem( i );
//
// }
//}
}
void CCXXXView::InitListHeader( int nselItem )
{
CListCtrl &List = GetListCtrl();
CHeaderCtrl *chcl = List.GetHeaderCtrl();
int nColCount = chcl->GetItemCount();
if( nColCount <= 0 )
{
//strHead.clear();
//strHead = g_ChiticWksLng.GetString(szSecContentList, "root_head_index", "索引");
List.InsertCol