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;

解决方案 »

  1.   

    ReleaseCapture
      函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。  函数原型:BOOL ReleaseCapture(VOlD)  参数:无。  返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetlastError函数。  备注:应用程序在调用函数SetCaPture之后调用此函数。  Windows:调用ReleaseCapture会引起失去鼠标捕获的窗日接收一个WM_CAPTURECHANGED消息。