CTreeCtrl背景图的实现在网上已经有很多了,比较著名的是这两篇:
这俩篇都实现了最基本的绘制,以及收缩和展开节点时候的刷新问题,后一篇还处理了滚动条刷新问题。这里提几点自己的实验体会,与大家共享:
(1)OnEraseBkgnd和OnPaint中的处理过程基本相同。
(2)在动态添加子项时(InsertItem),如果是插入到父节点的第一个子节点,处理OnTvnItemexpanding和OnTvnItemexpanded,刷新正常。但是如果是开始插入第二个子节点,那么不会响应OnTvnItemexpanding和OnTvnItemexpanded(因为父节点已经展开),因此会发现背景图产生偏移。这是由于InsertItem时未刷新导致的。因此只需要在调用代码InsertItem前加上下面一句即可:
m_treectrl.SetRedraw(TRUE);
(3)滚动条滚动刷新时 与(2)是同样的原理,要调用SetRedraw
(4)
处理了一般CTreeCtrl等控件闪烁的问题,很为实用
评论