BOOL BLock = m_Edit.LockWindowUpdate();

    if( (WSel-(WOldSeL>>16))>4 )
{
      m_Edit.SetSel(WSel, WSel, TRUE);
  m_Edit.ReplaceSel( ptxt->str);
 m_Edit.SetSel(WOldSeL, TRUE);
 m_Edit.LineScroll(WOldLineVi - m_Edit.GetFirstVisibleLine());
 }
 else
 {
 m_Edit.SetSel(WSel, WSel);
 m_Edit.ReplaceSel( ptxt->str);
 }
 m_Edit.UnlockWindowUpdate();用ReplaceSel()来更新CEditView 的内容。如果光标在文件尾部,则显示最新更新的内容。否则显示原来的内容。
用LockWindowUpdate();UnlockWindowUpdate();来锁定屏幕,便是发现UnlockWindowUpdate();之后,整个FRAME都有闪烁。
甚至桌面上的图标都闪。如果不用LockWindowUpdate();UnlockWindowUpdate();则显示的CEditView会有闪烁。
请问怎样消除这个闪烁???

解决方案 »

  1.   

    你要更新哪个窗口,你就Lock哪个窗口不知道你传参是不是正确的啊?
      

  2.   

    m_Edit.LockWindowUpdate();
    m_Edit.SetRedraw(FALSE);
    .....
    .....
    m_Edit.UnlockWindowUpdate();
    m_Edit.SetRedraw(TRUE);
      

  3.   

    http://blog.csdn.net/BalonFan/archive/2007/05/01/1594475.aspx
      

  4.   

    一个和你类似的问题,参考一下
    http://topic.csdn.net/u/20071119/20/b0d904ea-0dc3-4f46-9683-b30c5496b90e.htmlLockWindowUpdate不但闪烁,而且有可能引起桌面闪烁。因为LockWindowUpdate并不忽略消息,只是暂时不响应,所以有可能积聚多个重画消息,并在使用LockWindowUpdate(0)之后依次响应。
    而使用SendMessage(ClientHandle,WM_SETREDRAW,0,0)之后,控件根本不接收重画消息,除非使用SendMessage(ClientHandle,WM_SETREDRAW,1,0)之后;LockWindowUpdate的意思是暂时禁止某控件或窗口所在的区域更新(这个区域可能有多个窗口),LockWindowUpdate(0)的意思是有更新消息就更新屏幕上所有该更新的窗口吧。所以LockWindowUpdate(0)之后,若此前有重画消息积聚,会立刻重画。所以使用 LockWindowUpdate会在不同的时候有不同的表现,比如屏幕上窗口多少、堆放情况等等,所以有时不闪有时却闪个不停。SendMessage(ClientHandle,WM_SETREDRAW,0,0)的意思是不接收任何重画消息;
    SendMessage(ClientHandle,WM_SETREDRAW,1,0)的意思是可以接收并响应重画消息了,但并不立即重画,所以必须附加 ReDrawWindow(ClientHandle,nil,0,RDW_INVALIDATE  or  RDW_ALLCHILDREN); 
      

  5.   

    估计是LockWindowUpdate(NULL);了吧。
      

  6.   

    搞定了
    用 m_Edit.SetRedraw(FALSE); 锁定屏幕才是正解。
    不是这么用的。LockWindowUpdate()
    oyljerry和tttyd(雪影) 解释的比较好