LockWindowUpdate的函数的用法

时间:2022-05-30 07:12:07

Application.ProcessMessages;
LockWindowUpdate(Self.Handle); //锁住当前窗口

LockWindowUpdate(0)//解除锁定窗口

LockWindowUpdate不单闪烁,而且有可能引起桌面闪烁。因为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);