Mfc CTreeCntrl:SetItemImage导致重新绘制整个项目

Mfc CTreeCntrl:SetItemImage导致重新绘制整个项目,mfc,Mfc,我需要实现一些类似于动画树图像的东西。所以我有4个相同图标的状态,为了测试它,我创建了VS2010新项目,并为ON_WM_定时器和in函数add添加了处理程序(700毫秒定时器) 所以一切都很好,我的图标变成了动画和移动,但有时我看到整个树项目重新绘制(不仅是图标图像,但项目图像与文本)。那么有没有可能修复它呢?您可以尝试使用SetRedraw(FALSE)禁用redraw,直到调用SetItemImage之后,然后仅使image rect无效,您可能需要自己计算。如果我设置SetRedraw(

我需要实现一些类似于动画树图像的东西。所以我有4个相同图标的状态,为了测试它,我创建了VS2010新项目,并为ON_WM_定时器和in函数add添加了处理程序(700毫秒定时器)


所以一切都很好,我的图标变成了动画和移动,但有时我看到整个树项目重新绘制(不仅是图标图像,但项目图像与文本)。那么有没有可能修复它呢?

您可以尝试使用
SetRedraw(FALSE)
禁用redraw,直到调用
SetItemImage
之后,然后仅使image rect无效,您可能需要自己计算。如果我设置
SetRedraw(FALSE)
设置后我需要
TRUE
它会导致整个列表控件的重画:)
void CClassView::OnTimer(UINT_PTR nIDEvent)
{
    HTREEITEM hItem = m_wndClassView.GetRootItem(); 
    HTREEITEM hCurSel = m_wndClassView.GetNextItem(hItem, TVGN_CHILD ); 
    int nImage, nSelImage; 
    m_wndClassView.GetItemImage(hCurSel, nImage,nSelImage);
    int nNewImgae = nImage == 4 ? 1 : nImage+1;
    m_wndClassView.SetItemImage(hCurSel, nNewImgae, nNewImgae);
}