程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 再談“無標題欄窗口的移動技巧”

再談“無標題欄窗口的移動技巧”

編輯:VB綜合教程

  讀了金永濤朋友的“無標題欄窗口中鼠標拖動技巧”一文頗有啟發。但該文的思路是“通過設置時鐘中斷,在Mousemove()事件中根據鼠標的移動距離,實時修改窗體Form的Top及Left值,即可准確無誤地實現窗口的鼠標拖動操作。”正如該文所說,由於每移動一步都需要重畫窗口,因此利用此方法實現鼠標拖動,比常規的標題欄鼠標拖動慢一些。而且對於窗口中如有多種控件,若想使鼠標拖動窗口中的任何位置都可實現窗口移動,必須對窗口中的所有控件進行上述的鼠標位置記錄與移動處理。

  這些缺陷都是該法難以克服的。下面根據筆者學習到的方法,提出另外一種“無標題欄窗口中鼠標拖動”的方法,該方法利用了API函數ReleaseCapture和SendMessage,通過ReleaseCapture來獲取鼠標移動的信息並傳到窗口中,再由SendMessage來發送信息實現窗口的移動。這種方法的優點在於:代碼簡單,而且無需對窗口中的控件進行編程。下面以VB為例。

  當Form的ControlBox屬性為False且Caption屬性沒有設值時,窗口就變成了如圖1所示的“無標題欄的窗口”了。移動窗體代碼如下:

  在Modual1.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
   這時你再運行程序,就會發現窗體可以移動,且上面的控件自動隨窗體在移動。

  上述窗體在中文Visual Basic 6.0、中文Windows 98下運行通過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved