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会有闪烁。
请问怎样消除这个闪烁???
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会有闪烁。
请问怎样消除这个闪烁???
m_Edit.SetRedraw(FALSE);
.....
.....
m_Edit.UnlockWindowUpdate();
m_Edit.SetRedraw(TRUE);
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);
用 m_Edit.SetRedraw(FALSE); 锁定屏幕才是正解。
不是这么用的。LockWindowUpdate()
oyljerry和tttyd(雪影) 解释的比较好