请教:关于msdn中DRAWCLI的优化
msdn中DRAWCLI在编辑改变画面时会实时地更新画面,这样就需要在mousemove时进行重绘画面,如果画面元素太复杂时则影响较大,现我想修改一下,编辑改变画面图案时使用tracker(类似早期office文本框移动时虚线矩形效果)代替实际的图形,在LButtonUp 时才对画面进行重绘。分析了DRAWCLI中代码,发现到当移动一个CDrawObj时MoveTo函数在改变m_position前后分别调用了一次pView->InvalObj(this),后者则调用InvalidateRect(rect, FALSE)。由于InvalidateRect并不立即直接调用OnDraw,而是发送wm_paint消息,两个InvalidateRect合并为一个cliprect,然后在OnDraw中绘制。但这样会受到移动图案的起止点的影响,试想如果把图案从client 区的左上角移动到右下角,合并后的InvalidateRect可能就跟client差不多了,为了进一步优化,我想对m_position改变前后的两个InvalidateRect分别进行重绘。
现在的问题是如何分别对两个无效区进行重绘。我曾设想第一个InvalidateRect(rect, FALSE)后自己调用OnDraw,再把wm_paint删除,然后才调用第二个InvalidateRect(rect, FALSE)。但这个方法比较笨,不知道大家有没有更优雅的处理办法呢?