....//前面改面了,图形内容
//这里更新
pDoc->UpdateAllViews(NULL);//在另一个线程中运行
//下面在更新后的窗口中处理
....//在这里处理是发现窗口还没有还得级更新
//请问:我如何知道UpdateAllViews()运行完没有.

解决方案 »

  1.   

    要想在自己的程序高效绘图、只绘制无效矩形,首先需要重载视图的OnUpdate成员函数。virtual void CView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );当调用文档的UpdateAllViews时,框架会自动调用OnUpdate函数,也可在视图类中直接调用该函数。OnUpdate函数一般是这样处理的:访问文档,读取文档的数据,然后对视图的数据成员或控制进行更新,以反映文档的改动。可以用OnUpdate函数使视图的某部分无效。以便触发视的OnDraw,利用文档数据重绘窗口。缺省的OnUpdate使窗口整个客户区都无效,在重新设计时,要利用提示信息lHint和pHint定义一个较小的无效矩形。
      

  2.   

    你跟踪进去UpdateAllViews看它是怎么执行就知道了
      

  3.   

    我的意思是,要确保UpdateAllViews(NULL)执行完成后,再进行下面的操作.
    但是UpdateAllViews(NULL)好像是启动另一个线程执行更新,
    那么我如何知道更新以经完成...
      

  4.   

    不要在其他线程直接调用UpdateAllViews(NULL),可以用PostMessage()发个消息过去,在消息处理函数里面出来。
      

  5.   

    你可以在C...View::OnDraw()最后通过一个事件变量来通知你的线程。
      

  6.   

    应该是SendMessage()发个消息过去吧?这样是同步的,只有消息被处理完毕后(也就是UpdateAllViews()执行完成后),SendMessage()后面的代码才会被继续执行。
      

  7.   

    不要在其他线程直接调用UpdateAllViews(NULL),用SendMessage()同步消息。只有消息被处理完毕后,才执行下面的动作