📄 subject_49260.htm
字号:
<p>
序号:49260 发表者:mesen 发表日期:2003-08-08 13:59:34
<br>主题:关于重绘效率的问题
<br>内容:工具:MFC,VC60;用的是文档视图结构框架<BR>CFrame有三个分裂窗口View1,View2,View3,我在View3中修改了其成员变量,并想让这个视图按新修改后的数据进行重绘。<BR>我能想到的方法是直接调用文档指针:GetDocument()->UpdateAllViews(NULL);但这样势必将三个视图统统重绘,有点太浪费了点,我只是想让View3重绘,应该还有其它办法吧,比如直接调用CView的某个成员函数,但我不知道到底该调用那个函数,请朋友们帮忙出个主意。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:金源 回复日期:2003-08-08 14:55:30
<br>内容:UpdateAllViews的原码如下:<BR><BR>void CDocument::UpdateAllView(CView* pSender, LPARAM lHint, CObject* pHint)<BR> // walk through all views<BR>{<BR> ASSERT(pSender == NULL || !m_viewList.IsEmpty());<BR> // must have views if sent by one of them<BR><BR> POSITION pos = GetFirstViewPosition();<BR> while (pos != NULL)<BR> {<BR> CView* pView = GetNextView(pos);<BR> ASSERT_VALID(pView);<BR> if (pView != pSender)<BR> pView->OnUpdate(pSender, lHint, pHint);<BR> }<BR>}<BR><BR>可以看出,UpdateAllViews调用OnUpdate实现对除pSender外的每一个视的更新,如果你想对某一个视更新,是一下调用它的OnUpdate,或者用Invalidate,其实二者是一样的原码如下:<BR><BR>void CView::OnUpdate(CView* pSender, LPARAM /*lHint*/, CObject* /*pHint*/)<BR>{<BR> ASSERT(pSender != this);<BR> UNUSED(pSender); // unused in release builds<BR><BR> // invalidate the entire pane, erase background too<BR> Invalidate(TRUE);<BR>}<BR><BR>然后Invalidate(TRUE)通过OnDraw重绘了视。(我想是这样)<BR><BR>请再注意一下 UpdateAllViews 的后两个参数LPARAM lHint, CObject* pHint它们对提高绘图效率是很有帮助的。<BR><BR>比如你只想重绘一个Rect,那么如下:<BR><BR>//in doc class<BR>UpdateAllViews(NULL,1,(CObject*)pRect);<BR><BR>//in view class<BR>void CMyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)<BR>{<BR> if(lHint==1)<BR> {<BR> CRect *pRect == (*CRect) pHint;<BR> InvalidateRect(pRect);<BR> return;<BR> }<BR> <BR> CView::OnUpdate(........);<BR>}<BR><BR>你也可以对特定的CObject对象重画,方法全在你!<BR><BR>请批评指正!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mesen 回复日期:2003-08-08 15:08:12
<br>内容:谢谢你我明白了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金源 回复日期:2003-08-08 15:11:20
<br>内容:不客气
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -