窗体分割后,可以通过UpdateAllViews(this)来更新所有,现在需要更新指定的一个

kw123 2007-09-20 01:03:44
分割后,建立了三个VIEW,为了操作方便,全部采用CFromView来处理,可以采用UpdateAllViews(this)来调用其他分割窗体的onUpdate()来处理更新

现在发现,如果采用该方式,其他所有的分割窗体都要刷新.形成了闪烁(可以看的出来的).有没有办法让它只更新指定某个VIEW啊(CFromView)?

考虑采用postmessage

cxyzFrom *hnd;
HWND hWnd=hnd->m_hWnd;
::postmessage(hWnd,WM_XXXX,NULL,NULL);

调用时候,到HWND hWnd=hnd->m_hWnd就出错的.是什么原因啊?

或者有什么更好的办法
...全文
222 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
manbaum 2007-09-21
  • 打赏
  • 举报
回复
NistCK(蓝眩) 给的是正解了,楼主好好看看msdn里关于这个函数的说明吧。

其中lhint和phint是你自己给的数据,你可以把要怎么更新包装成一个cobject的子类对象,通过phint传出去,所有的view就可以根据你给的这个提示来更新了。

class CMyHint : CObject
{
public:
CRect rcInvalidate;
}

CMyHint *phint = new CMyHint();
UpdateViewAll(this, 0, phint);

在cview::onupdate()里:

CMyHint *pmyhint = (CMyHint*)phint;
this->InvaliateRect(pmyhint->rcInvalidate);

以上只是个示例,非完整代码。
kw123 2007-09-21
  • 打赏
  • 举报
回复
是啊!

加分结贴
appleboyecho 2007-09-21
  • 打赏
  • 举报
回复
我同意,自然是有我的道理。
appleboyecho 2007-09-21
  • 打赏
  • 举报
回复
呵呵,我建议楼主还是好好看看MFC基础吧。
livedeal 2007-09-21
  • 打赏
  • 举报
回复
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
cxyj *m_pxyj=(cxyj *)(pMain->m_wndSplitter1.GetPane(0,0));
m_wndSplitter1是你的分割窗口的对象,(0,0)是你的cxyj在分割窗口后中的位置
kw123 2007-09-21
  • 打赏
  • 举报
回复
z怎么得到"得到你的那个View的指针的...?
livedeal 2007-09-21
  • 打赏
  • 举报
回复
cxyj *m_pxyj 这个只是空指针,你要得到你的那个View的指针的```
m_pxyj->InvalidateRect(...);
或者
m_pxyj->Invalidate()

其实可以在CXXXView=(CXXXView *)m_wndSplitter1.GetPane(0,0);
kw123 2007-09-21
  • 打赏
  • 举报
回复
同意什么啊!

直接调用,编译是通过的.现在的情况下是一执行就出错的.

cxyj *m_pxyj
m_pxyj->InvalidateRect(...);
或者
m_pxyj->Invalidate()



使用
UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL );

和上面不同的地方是 与UpdateAllViews(this)以及UpdateAllViews(NULL)没有区别的


看来此贴要加分处理了.!特追加分数


appleboyecho 2007-09-20
  • 打赏
  • 举报
回复
呵呵我也同意楼上的观点,直接获得视图的指针调用Invalidate()重绘。
wjkgz 2007-09-20
  • 打赏
  • 举报
回复
那么费劲做什么,要刷新哪个,直接调用那个view的Update,或者是InvalidateRect。何必绕那个弯呢。
NistCK 2007-09-20
  • 打赏
  • 举报
回复
void UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL );

这个函数会调用每个view的CView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint ), 可以通过给UpdateAllViews传递不同的 lHint, pHint值,在OnUpdate里决定当前这个view是否需要更新。
菜牛 2007-09-20
  • 打赏
  • 举报
回复
根据UpdateAllViews的参数,在C...View::OnUpdate()中判断是否需要更新(调用Invalidate)
zhuwuwei 2007-09-20
  • 打赏
  • 举报
回复
cxyzFrom *hnd;
// 这里你得给你的窗口指针赋值啊。
HWND hWnd=hnd->m_hWnd;
::postmessage(hWnd,WM_XXXX,NULL,NULL);
raymonzhao 2007-09-20
  • 打赏
  • 举报
回复
在文档类中:
POSITION pos = GetFirstViewPosition();
while(pos)
{
CView * pView = GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CXXXXXView)))
{
//DO ANYTHING
break;
}
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧