虚拟CMFCListctrl滚动条闪烁

时间:2018-05-03 14:15:25

标签: mfc mfc-feature-pack

我正在使用虚拟列表控件。

我每隔秒(连续)刷新/加载列表控件的数据。

我使用以下代码:

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(),但它没有帮助我。

0 个答案:

没有答案