拖动无标题栏窗体 整理

来源:互联网 发布:软件产品报价 编辑:程序博客网 时间:2024/05/21 07:51

1、使用  SendMessage

说明: 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回SendMessage所包含4个参数:

1.      hwnd      32位的窗口句柄窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄

2.      wMsg      用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量

3.      wParam      通常是一个与消息有关的常量值,也可能是窗口或控件的句柄

4.      lParam      通常是一个指向内存中数据的指针。由于WParm、lParam和Pointer都是32位的,因此,它们之间可以相互转换

具体用法可以看 DELPHI中SendMessage详细资料

以下代码放在 OnMouseDown事件中,可以拖动任何具有Handle的控件。

  ReleaseCapture;  SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);

2、使用 Perform

说明:perform是给自己发消息,所以同SendMessage或PostMessage的区别只在于少了第一个HWND参数
以下代码放在 OnMouseDown或者OnMouseMove 事件中,不能指定HWND。

  ReleaseCapture;  Perform(WM_SYSCOMMAND, $F017, 0);


3、使用 POSTMESSAGE

以下代码放在OnMouseDown事件中

  POSTMESSAGE(Self.Handle,WM_LBUTTONUP,0,0);  POSTMESSAGE(Self.Handle,274,61458,0);

4、截获WM_NCHITTEST消息

说明:当光标移动到窗体,或鼠标按下,释放时,都会发送WM_NCHITTEST消息。

procedure WMNCHITTEST(var Msg:TWMNCHITTEST);message WM_NCHITTEST;procedure TForm1.WMNCHITTEST(var Msg: TWMNCHITTEST);begininherited;  Msg.Result:=HTCaption;end;
原创粉丝点击