求达人解释下 SetCapture 和 ReleaseCapture 的用法,谢谢!
SetCapture
函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。
什么意思?“无论光标是否在窗口的边界内”屏幕中央个小窗体捕捉鼠标,在这窗体旁边点鼠标,这消息只会发给中央小窗体吗?
这一对函数一定要成对使用吗?一般在什么情况下使用?有没什么注意事项?
求一段代码,能解释使不使用这对函数 的区别 。非常感谢!!!
[解决办法]
意思是说,只要设置了SetCapture,所有鼠标的操作都会在调用该函数的窗口处捕捉到,包括该窗口以外的鼠标操作,你可以看到SetCapture有一个HWND类型的参数(API原型),就是标识这个窗口的,如果不执行这个函数你是捕捉不到窗口以外的操作的,相对应的,ReleaseCapture就是解除这种设定。
[解决办法]
常用的是在OnLButtonDown中SetCapture,在OnLButtonUp中ReleaseCapture,这样就可以捕获所有两个消息之间的鼠标移动消息(OnMouseMove),即使鼠标移动到窗口外面。当鼠标在窗口外面点击的时候,被点击的窗口获得焦点,原来的SetCapture也就失效了。
SetCapture和ReleaseCapture必须成对使用。
[解决办法]
如果要在OnLButtonDown设置某种状态,而要在ButtonUp里面释放这种状态的话,就要这两个函数了,否则在外面ButtonUp的话,状态还要会持续。
[解决办法]
不要设断点,改用文字输出信息就可以看到了。因为你设了断点,窗口焦点就会切换,从而使SetCapture失效。