LockWindowUpdate系列3:什么样的操作中应当使用LockWindowUpdate?

 
如我在前面所说的,LockWindowUpdate的设计意图可以用一个词表达:拖拽。
LockWindowUpdate 最简单的使用场景是在“拖动时显示窗口内容”功能关闭的情况下,当你移动或是改变窗口尺寸时,被窗口管理器使用。当你开始移动/改变尺寸操作,窗口管理器锁定整个桌面以便可以绘制细点矩形反馈,而不会因为其它窗口偶然与细点矩形交叠而导致冲突的风险。当移动/改变尺寸的操作完成,桌面被解锁,所有东西恢复原貌。
 
应用程序使用LockWindowUpdate的常见的场景,是希望为拖拽提供反馈而绘制一个自定义的图片。在这个情况下,应用程序锁定它自己的窗口以绘制拖拽的反馈。使用 DCX_LOCKWINDOWUPDATE 标志来获取一个可以用来绘制所需的反馈的DC,这样就不必担心窗口函数或应用程序中任何其它的代码偶然的绘制到反馈窗口上,并搞乱了拖拽图片。例如,如果这个应用程序正在一个列表视图中绘制拖拽的反馈,此时某个异步事件引发这个列表视图的内容改变(比方说添加了一个列表项),并且拖拽的图片正好在新添加的列表项要出现的位置,你一定不会想让列表视图的标准重绘行为覆盖(或是更糟,重合)了拖拽的图片。
 
可能你需要锁定其它应用程序的窗口的场景是当你要把一个物体拖过整个屏幕。如果你的程序是一个类似Spy那样的程序,允许用户通过拖拽一个“选择器”到一个窗口上方来选择它时,你可能会需要这么做。你需要锁定用户当前选择的窗口,不仅让它自己的重绘制不会与你的“选择器”冲突,也使其不会与你放置在窗口边沿的高亮效果冲突。
 
现在,你可能已经注意到所有使用LockWindowUpdate场景中一个共同的思路:他们都和某种形式的拖拽有关。拖拽窗口的标题以移动它、拖拽窗口的边框以改变它的尺寸、将一个对象拖入窗口或是拖出窗口。这不是一个巧合,LockWindowUpdate就是专门设计用于这些拖拽场景的。由于拖拽对象要用到鼠标按键,而只会有一个鼠标,故而同一时间不会有多个拖拽操作进行。因此,没有必要同时锁定多个窗口的更新。也许这个函数应当更准确的命名为LockDragWindow。

原文出处:http://blogs.msdn.com/oldnewthing/archive/2007/02/21/1735472.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值