摘要载入中…    请稍等…















内容载入中…    请稍等…

拖动无系统标准标题栏的窗口

2009-1-5 21:16:10   来源:互联网  

   

 ·在Visual Basic中如何拖动窗体 ·显示Windows系统的标准ABOUT窗 ·移动没有标题栏的窗口

拖动无系统标准标题栏的窗口
吴斌 
  大家知道,在VB中可以通过设置Form的属性,制作无系统标题栏的窗口可是,
由于失去了系统标题栏,如何使用鼠标拖动窗口便成了一个棘手的问题。其实,借
助API函数ReleaseCapture和SendMessage,这个问题便可迎刃而解了。
  首先,在module文件中加入下列声明语句:
  Declare Sub ReleaseCapture Lib"User"()
  Declare Function SendMessage Lib"User"(ByVal hWnd As Integer,ByVal 
wMsg As Integer,ByVal wParam As Integer,_lParam As Any)As Long
  Public Const WM_SYSCOMMAND=&H112
  Public Const SC_MOVE=&HF010
  Public Const HTCAPTION=2
  然后,在Form的MouseDown事件中加入下列代码:
  ReleaseCapture
  Ret&=SendMessage(Me.hWnd,WM_SYSCOMMAND,_SC_MOVE+HTCAPTION,0)
  ……
  程序运行后,只要当光标落在Form区域时按住鼠标左键,便可以拖动窗口了。
在一些要求生动活泼的界面的程序设计中,开发者常常希望自制风格独特的标题栏,
以满足整个界面的要求。通过这个方法,就可以使自制的标题栏达到乱真的地步。
不过,用作自制标题栏的控件,必须具有MouseDown事件以摆放上述代码。


移动没有标题栏的窗口 
我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,
我们可以用下面的方法来移动窗口:
 
在 BAS 文件中声明:
Declare Function ReleaseCapture Lib "user32" () As Long
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 HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
 
然后,在 Form_MouseDown 事件中:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End Sub



 [1]