我正在使用虚拟列表控件。
我每隔秒(连续)刷新/加载列表控件的数据。
我使用以下代码:
bool CMyListCtrl::Init(CWnd* pParent)
{
CRect rectDummy;
if(!Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_OWNERDATA,
rectDummy, pParent, IDC_LIST1))
return false;
#define LVS_EX_DOUBLEBUFFER 0x00010000
SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_DOUBLEBUFFER);
InsertColumn(0,_T("#"),LVCFMT_LEFT, 20,1);
InsertColumn(1,_T("Tag Name"),LVCFMT_LEFT, 100,1);
InsertColumn(2,_T("Data Type"),LVCFMT_LEFT, 50,1);
InsertColumn(3,_T("Address/Exp"),LVCFMT_LEFT, 50,1);
InsertColumn(4,_T("# of Characters"),LVCFMT_LEFT, 110,1);
InsertColumn(5,_T("Initial Value"),LVCFMT_LEFT, 50,1);
InsertColumn(6,_T("Retentive Flag"),LVCFMT_LEFT, 50,1);
InsertColumn(7,_T("PLC/Int/Exp"),LVCFMT_LEFT, 50,1);
InsertColumn(8,_T("Write Tag"),LVCFMT_LEFT, 50,1);
return true;
}
void CMyListCtrl::UpdateUI(std::vector<CTagList*>* vpTags)
{
m_vpTags=vpTags;
if(m_vpTags==NULL) return;
if(m_iSortedColumn>-1 && m_vpTags->size()>1)
std::sort(m_vpTags->begin(), m_vpTags->end(), S_TagComparator(m_iSortedColumn,m_bAscending,this));
SetItemCountEx(m_vpTags->size(),LVSICF_NOSCROLL|LVSICF_NOINVALIDATEALL);
}
void CMyListCtrl::OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
*pResult = 0;
LV_ITEM* pItem = &(pDispInfo)->item;
CDrawObjLad* pObj = m_vInss[pItem->iItem];
//update column text
if(pItem->mask & LVIF_TEXT){
CString text;
switch(pItem->iSubItem){
case 1: text = CUtils::Format(_T("%d"),pItem->iItem+1);break;
case 2: text = pObj->GetElementName(); break;
case 3: text = CUtils::Format(_T("%d"),pObj->m_nRow);break;
case 4: text = CUtils::Format(_T("%c"),0x40+pObj->m_nCol);break;
}
lstrcpyn(pItem->pszText, text, pItem->cchTextMax);
}
}
列表控件垂直滚动条似乎闪烁或上下晃动。如何避免呢?
我在列表控件中尝试了ON_WM_ERASEBKGND(),但它没有帮助我。