'點(diǎn)擊窗口的任何位置拖動(dòng)窗體

創(chuàng)新互聯(lián)企業(yè)建站,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
Dim ctX As Single, ctY As Single
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ctX = X: ctY = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Me.Left = Me.Left + X - ctX
Me.Top = Me.Top + Y - ctY
End If
End Sub
在VB中,BorderStyle屬性為0的窗體沒有邊框,并且也沒有與邊框相關(guān)的元素。這種窗體具有簡(jiǎn)潔、占用空間少等優(yōu)點(diǎn),用它可以設(shè)計(jì)出某些富有個(gè)性的窗體。但是,由于它沒有標(biāo)題欄,窗體不能移動(dòng),同時(shí)也不能改變大小,在某些情況下會(huì)給使用者造成一定的麻煩。本文介紹在VB中如何用API函數(shù)操作無邊框窗體。
移動(dòng)窗體
新建一標(biāo)準(zhǔn)工程,設(shè)置Form1的BorderStyle屬性為0。此時(shí)運(yùn)行程序后,無法移動(dòng)窗體。為能移動(dòng)窗體,在Form1的代碼窗口聲明下列函數(shù)和常數(shù):
Option Explicit
Private Declare Function ReleaseCapture Lib “user32” ()AsLong
Private Declare Function SendMessage Lib “user32”Alias“SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Long, lParam As Any) As Long
Const WM_SYSCOMMAND = H112
Const SC_MOVE = HF012
在Form_MouseDown事件中輸入以下代碼:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer,XAs Single, Y As Single)
按下鼠標(biāo)左鍵
If Button = vbcenterButton Then
為當(dāng)前的應(yīng)用程序釋放鼠標(biāo)捕獲
ReleaseCapture
移動(dòng)窗體
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End If
End Sub
注意:此時(shí)窗體上不能放置除Shape控件以外的任何控件,否則,在被控件遮住的地方點(diǎn)按鼠標(biāo)還是無法移動(dòng)窗體。要使點(diǎn)按控件也能移動(dòng)窗體,需再添加一個(gè)該控件的MouseDown事件過程,代碼與上述過程代碼相似。
改變窗體的大小
為了改變窗體的大小,需要添加一個(gè)Timer控件,以定時(shí)捕獲鼠標(biāo)在窗體中的位置。當(dāng)鼠標(biāo)位于窗體邊緣時(shí),改變鼠標(biāo)的形狀,以通知用戶可以進(jìn)行改變大小的操作。為此,將Timer控件的Interval屬性設(shè)為100(即每過100毫秒檢測(cè)一下鼠標(biāo)位置),其他取默認(rèn)值。
在Form1的代碼窗口中再添加下列兩個(gè)函數(shù),并定義兩個(gè)自定義變量和一個(gè)字符串變量:
取得窗體位置的函數(shù)
Private Declare Function GetWindowRect Lib “user32” (ByVal hwndAsLong, lpRect As RECT) As Long
取得鼠標(biāo)位置的函數(shù)
Private Declare Function GetCursorPos Lib “user32” (lpPointAsPOINTAPI) As Long
鼠標(biāo)位置變量
Private Type POINTAPI
x As Long
y As Long
End Type
窗體位置變量
Private Type RECT
center As Long
Top As Long
center As Long
Bottom As Long
End Type
所要執(zhí)行的動(dòng)作變量,是移動(dòng)還是改變大小及從哪個(gè)方向改變大小
Dim Action As String
在Timer1控件的Timer事件過程中添加以下代碼:
Private Sub Timer1_Timer()
Dim MyRect As RECT
Dim MyPoint As POINTAPI
MyRect返回當(dāng)前窗口位置
Call GetWindowRect(Me.hwnd, MyRect)
MyPoint返回當(dāng)前鼠標(biāo)位置
Call GetCursorPos(MyPoint)
Select Case True
鼠標(biāo)位于窗體左上方
Case MyPoint.x MyRect.center + 5 And MyPoint.y ="" p=""
Screen.MousePointer = vbSizeNWSE
Action = “centerUp”
鼠標(biāo)位于窗體右下方
Case MyPoint.x MyRect.center - 5 And MyPoint.yMyRect.Bottom - 5
Screen.MousePointer = vbSizeNWSE
Action = “centerDown”
鼠標(biāo)位于窗體右上方
Case MyPoint.x MyRect.center - 5 And MyPoint.y="" p="" +=""
’45度雙向鼠標(biāo)指針
Screen.MousePointer = vbSizeNESW
Action = “centerUp”
鼠標(biāo)位于窗體左下方
Case MyPoint.x MyRect.center + 5 And MyPoint.yMyRect.Bottom - 5
Screen.MousePointer = vbSizeNESW
Action = “centerDown”
鼠標(biāo)位于窗體左邊
Case MyPoint.x MyRect.center + 5
水平雙向鼠標(biāo)指針
Screen.MousePointer = vbSizeWE
Action = “center”
鼠標(biāo)位于窗體右邊熱門推薦: C++程序設(shè)計(jì)之四書五經(jīng) 談?wù)凧AVA程序的反編譯1 2
MyRect.center - 5
Screen.MousePointer = vbSizeWE
Action = “center”
鼠標(biāo)位于窗體上方
Case MyPoint.y MyRect.Top + 5
垂直雙向鼠標(biāo)指針
Screen.MousePointer = vbSizeNS
Action = “Up”
鼠標(biāo)位于窗體下方
Case MyPoint.y MyRect.Bottom - 5
Screen.MousePointer = vbSizeNS
Action = “Down”
鼠標(biāo)位于窗體其他位置
Case Else
默認(rèn)鼠標(biāo)指針
Screen.MousePointer = 0
Action = “Move”
End Select
End Sub
當(dāng)利用SendMessage函數(shù)由系統(tǒng)向窗口發(fā)送改變大小的信息時(shí),只要將上面移動(dòng)窗體的語(yǔ)句“SendMessageMe.hwnd,WM_SYSCOMMAND, SC_MOVE, 0”中的第3個(gè)參數(shù)改為相應(yīng)的常數(shù)即可。
VB中HF001~HF008分別是從左、右、上、左上、右上、下、左下、右下8個(gè)方向改變窗體大小的常數(shù)。結(jié)合移動(dòng)窗體的代碼,將上述Form_MouseDown事件的代碼綜合如下(也可以把這8個(gè)常數(shù)聲明為自定義常數(shù)):
Private Sub Form_MouseDown(Button As Integer, Shift As Integer,xAs Single, y As Single)
按下鼠標(biāo)左鍵
If Button = vbcenterButton Then
為當(dāng)前的應(yīng)用程序釋放鼠標(biāo)捕獲
ReleaseCapture
Select Case Action
Case “center”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF001, 0
Case “center”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF002, 0
Case “Up”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF003, 0
Case “centerUp”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF004, 0
Case “centerUp”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF005, 0
Case “Down”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF006, 0
Case “centerDown”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF007, 0
Case “centerDown”
SendMessage Me.hwnd, WM_SYSCOMMAND, HF008, 0
Case “Move”
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Select
End If
End Sub
Public Class Form1
Dim 初始化控件自動(dòng)大小調(diào)整與窗口的寬度比例 As Integer
Dim 初始化控件自動(dòng)大小調(diào)整與窗口的高度比例 As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
初始化控件自動(dòng)大小調(diào)整與窗口的寬度比例 = Me.Width / 控件自動(dòng)大小調(diào)整.Width
初始化控件自動(dòng)大小調(diào)整與窗口的高度比例 = Me.Height / 控件自動(dòng)大小調(diào)整.Height
顯示控件的位置坐標(biāo)()
End Sub
Private Sub Form1_ResizeEnd(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeEnd
' Form1_ResizeEnd? 這個(gè)事件是 窗口大小變化完成后 再進(jìn)行操作的
控件自動(dòng)大小調(diào)整.Location = New Point(控件自動(dòng)大小調(diào)整.Left, 控件自動(dòng)大小調(diào)整.Top)
'設(shè)置控件的初始左位置坐標(biāo)? 與? 上位置坐標(biāo)
控件自動(dòng)大小調(diào)整.Size = New Point(Int(Me.Width / 初始化控件自動(dòng)大小調(diào)整與窗口的寬度比例), Int(Me.Height / 初始化控件自動(dòng)大小調(diào)整與窗口的高度比例))
'更改控件的大小? 按第一次窗口的比例 進(jìn)行調(diào)整
顯示控件的位置坐標(biāo)()
End Sub
Private Sub 顯示控件的位置坐標(biāo)()
Label1.Text = "控件的上邊距坐標(biāo): " 控件自動(dòng)大小調(diào)整.Top
Label2.Text = "控件的左邊距坐標(biāo): " 控件自動(dòng)大小調(diào)整.Left
Label3.Text = "控件的寬度大小: " 控件自動(dòng)大小調(diào)整.Width
Label4.Text = "控件的高度大小: " 控件自動(dòng)大小調(diào)整.Height
End Sub
End Class
還有好多方法? 慢慢研究吧兄弟 希望能幫到你
窗體在改變大小時(shí)會(huì)有一個(gè)size事件的,在這個(gè)事件中寫代碼獲取窗體的高度和寬度再根據(jù)窗體的高度和寬度的比例來效果自己的控件的高度寬度比例
From1.Height = "100" '窗體高度
From1.Width = "100" '窗體寬度
From1.Location = New Point(500, 100) ’移動(dòng)窗體(橫坐標(biāo),縱坐標(biāo))
兩種方法,一種是固定窗口大小,一種是控件在窗口大小改變時(shí),自動(dòng)按窗口位置進(jìn)行改變;
以上為個(gè)人看法,手打很辛苦,希望采納,謝謝您的支持。
謝謝您的支持,有任何疑問歡迎您再次通過此渠道提問,讓大家共同解決,共同進(jìn)步!
以上回答僅為“百度規(guī)則”,沒有任何違法行為,請(qǐng)樓主采納,謝謝!
分享名稱:vb.net自動(dòng)調(diào)整窗口,vb怎么調(diào)出屬性窗口
文章位置:http://chinadenli.net/article15/dsepggi.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站營(yíng)銷、域名注冊(cè)、手機(jī)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)