ReleaseCapture 这个函数的具体作用是啥啊?看不太明白哎
我写了一个图形窗口的移动事件。
原来搞明白了,现在又不太明白了。
我实现的功能是这样的。放一个lable在一个image上,然后鼠标按在lable上的时候,
发送窗体的移动消息,双击label的时候,发送最大化/还原消息求大侠讲解一下,呵呵。效果我是实现了,但不明白原理。代码是这样的
procedure TmForm.lblMoveDblClick(Sender: TObject);
begin
//如果没有lblMoveMouseDown事件,则这里不需要加releasecapture也是起到我的效果。
//如果有lblMovemouseDown事件,则这里必须加releasecapture,否则不起作用。
ReleaseCapture; //释放鼠标的捕获状态;
if mForm.WindowState = wsMaximized then
(mForm as TWinControl).PerForm(wm_SysCommand,SC_RESTORE,0)//向窗体发送最小化消息;
else
(mForm as TWinControl).PerForm(wm_SysCommand,SC_MAXIMIZE,0);//向窗体发送最小化消息;
end;
procedure TmForm.lblMoveMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//如果这里不加releasecapture,则后面这个发送窗体移动消息无效。
ReleaseCapture; //释放鼠标的捕获状态;
(mForm as TWinControl).PerForm(wm_SysCommand,sc_DragMove,0);//向窗体发送移动消息;
end;
我写了一个图形窗口的移动事件。
原来搞明白了,现在又不太明白了。
我实现的功能是这样的。放一个lable在一个image上,然后鼠标按在lable上的时候,
发送窗体的移动消息,双击label的时候,发送最大化/还原消息求大侠讲解一下,呵呵。效果我是实现了,但不明白原理。代码是这样的
procedure TmForm.lblMoveDblClick(Sender: TObject);
begin
//如果没有lblMoveMouseDown事件,则这里不需要加releasecapture也是起到我的效果。
//如果有lblMovemouseDown事件,则这里必须加releasecapture,否则不起作用。
ReleaseCapture; //释放鼠标的捕获状态;
if mForm.WindowState = wsMaximized then
(mForm as TWinControl).PerForm(wm_SysCommand,SC_RESTORE,0)//向窗体发送最小化消息;
else
(mForm as TWinControl).PerForm(wm_SysCommand,SC_MAXIMIZE,0);//向窗体发送最小化消息;
end;
procedure TmForm.lblMoveMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//如果这里不加releasecapture,则后面这个发送窗体移动消息无效。
ReleaseCapture; //释放鼠标的捕获状态;
(mForm as TWinControl).PerForm(wm_SysCommand,sc_DragMove,0);//向窗体发送移动消息;
end;
函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。 函数原型:BOOL ReleaseCapture(VOlD) 参数:无。 返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetlastError函数。 备注:应用程序在调用函数SetCaPture之后调用此函数。 Windows:调用ReleaseCapture会引起失去鼠标捕获的窗日接收一个WM_CAPTURECHANGED消息。