请教如何不使用Windows窗口标题栏移动窗口?(none)

zscao 2000-01-07 09:05:00
...全文
293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
crope 2000-01-07
  • 打赏
  • 举报
回复
自己监视鼠标的运动,然后改变窗口的位置。
jing 2000-01-07
  • 打赏
  • 举报
回复
把标题拦去掉做自己的标题栏.
jing 2000-01-07
  • 打赏
  • 举报
回复
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const HTLEFT = 10
Public Const HTRIGHT = 11
Public Const HTTOP = 12
Public Const HTTOPLEFT = 13
Public Const HTTOPRIGHT = 14
Public Const HTBOTTOM = 15
Public Const HTBOTTOMLEFT = 16
Public Const HTBOTTOMRIGHT = 17


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim sctop, sleft
top1 = Top
left1 = Left
ReleaseCapture
If X > ScaleWidth - 50 And Y > ScaleHeight - 50 Then
SendMessage hWnd, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0&

ElseIf X < 5 Then
SendMessage hWnd, WM_NCLBUTTONDOWN, HTLEFT, 0&

ElseIf X > ScaleWidth - 5 Then
SendMessage hWnd, WM_NCLBUTTONDOWN, HTRIGHT, 0&
ElseIf Y < 5 Then
SendMessage hWnd, WM_NCLBUTTONDOWN, HTTOP, 0&
ElseIf Y > ScaleHeight - 5 Then
SendMessage hWnd, WM_NCLBUTTONDOWN, HTBOTTOM, 0&
Else

SendMessage hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
Form2.Left = Form2.Left + Form1.Left - left1
Form2.Top = Form2.Top + Form1.Top - top1
End If
Shape1.Move Me.ScaleLeft, Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If X < 5 Or X > ScaleWidth - 5 Then
MousePointer = vbSizeWE
ElseIf Y < 5 Or Y > ScaleHeight - 5 Then
MousePointer = vbSizeNS
ElseIf X > ScaleWidth - 50 And Y > ScaleHeight - 50 Then
MousePointer = vbSizeNWSE
Else
MousePointer = vbSizePointer
End If

End Sub


Private Sub Form_Unload(Cancel As Integer)
If MyRgn <> 0 Then DeleteObject MyRgn
If OutRgn <> 0 Then DeleteObject OutRgn
If InRgn <> 0 Then DeleteObject InRgn
End Sub
startcn 2000-01-07
  • 打赏
  • 举报
回复
type
  TForm1=class(TForm)
  procedureFormCreate(Sender:TObject);
  :
  public
  {申明消息过滤过程}
  procedureAppMessage(varMsg:TMsg;varHandled
:Boolean);
  :
  implementation
  procedureTForm1.FormCreate(Sender:TObject)

  begin
  {捕捉消息:将程序的收到消息事件与消息过滤过程
关联起来}
  Application.OnMessage:=AppMessage;
 end;

  procedureTForm1.AppMessage(varMsg:TMsg;var
Handled:Boolean);

  begin

  {如果鼠标左键按下的话}

  ifMsg.message=WM—LButtonDown then
  begin
  {判断光标是否在用户工作区内}
  if DefWindowProc(Handle,WM—NCHitTest,0,Get
MessagePos)ΚHTClient then
  begin
  {发出鼠标在用户标题栏内被按下的消息}
  SendMessage(Handle,WM—NCLButtonDown,
  HTCaption,GetMessagePos);
  Handled:=true;{消息处理完毕,窗体不再接受M
ouseDown及Click事件,如果为false,程序的运行稍微有
些不正常。}
  end;
  end;
  end;

  end.

kxy 2000-01-07
  • 打赏
  • 举报
回复
截获 WM_NCHITTEST 在你想移动窗口的区域返回 HTCAPTION
具体可以看WM_NCHITTEST的windows API的帮助.

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧