我是在单文档客户区内实现绘图功能,实现方法:点击菜单栏上的功能选项后,给一个全局变量一个值,然后在view类的ondraw函数里进行判断后执行相应的程序段,我想实现屏幕清空,我的方法为:也是点击菜单上的“清屏”给变量 m_clean一个值,然后在ondraw里判断执行Invailidate();(m_mode为绘图判断变量),可是运行一次清屏后,整个程序变得有延迟,我请教一下原因,还有如果用句柄,另设一个函数:用pWnd->Invalidate();怎么写啊?
我的程序如下:
void CTestDialogView::OnScreenClean() 
{
  m_mode=0;
  m_clean=1;
  Invalidate();
}else if(m_clean==1&&m_mode==0)
   {
       
   Invalidate();
    
   }

解决方案 »

  1.   

    ondraw 里面调用  Invalidate();
    会产生 WM_PAINT 再次调用ondraw
    从而进入一个死循环 用FillRect吧
      

  2.   

    好象是调用Invalidate()后,并不马上执行更新,而是当下一个WM_PAIN调用 或者 有Validate()调用时 才真正执行.
    所以,你在OnDraw()中调用,会等到有下一个OnDraw()时才更新,所以看起来会有点延迟.
      

  3.   

    谢谢了!
    我的msdn出了问题,麻烦那位可以写一下实现代码嘛?
      

  4.   

    去掉你OnDraw里的Invalidate();
    或者用刷子重新刷一次你的客户区