vb點(diǎn)虐 無邊框按鈕 vb邊框類型怎么設(shè)置

VB點(diǎn)虐 怎樣按住鼠標(biāo)移動(dòng)無邊框窗體

1.在mouse事件中實(shí)現(xiàn)

創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營銷、管理等多方位專業(yè)化運(yùn)作于一體。

2.調(diào)用windows API

實(shí)現(xiàn)方式為:

1.在mouse事件中實(shí)現(xiàn)

[csharp] view plain copy

Point mouseOff;//鼠標(biāo)移動(dòng)位置變量

bool leftFlag;//標(biāo)簽是否為左鍵

private void groupControl1_MouseUp(object sender, MouseEventArgs e)

{

if (leftFlag)

{

leftFlag = false;//釋放鼠標(biāo)后標(biāo)注為false;

}

}

private void groupControl1_MouseMove(object sender, MouseEventArgs e)

{

if (leftFlag)

{

Point mouseSet = Control.MousePosition;

mouseSet.Offset(mouseOff.X, mouseOff.Y); //設(shè)置移動(dòng)后的位置

Location = mouseSet;

}

}

private void groupControl1_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

mouseOff = new Point(-e.X, -e.Y); //得到變量的值

leftFlag = true; //點(diǎn)擊左鍵按下時(shí)標(biāo)注為true;

}

}

private void groupControl1_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

mouseOff = new Point(-e.X, -e.Y); //得到變量的值

leftFlag = true; //點(diǎn)擊左鍵按下時(shí)標(biāo)注為true;

}

}

2.調(diào)用windows API

調(diào)用前需要添加using System.Runtime.InteropServices;

[csharp] view plain copy

[DllImport("user32.dll")]

public static extern bool ReleaseCapture();

[DllImport("user32.dll")]

public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

private void groupControl1_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

ReleaseCapture(); //釋放鼠標(biāo)捕捉

//發(fā)送左鍵點(diǎn)擊的消息至該窗體(標(biāo)題欄)

SendMessage(Handle, 0xA1, 0x02, 0);

}

}

vb點(diǎn)虐 無邊框窗體的問題

設(shè)置窗體的text為空,設(shè)置窗體的controlbox屬性為false,設(shè)置窗體的FormBorderStyle 屬性為Sizable,就可以改變窗體大小了,并且可以在任務(wù)欄點(diǎn)擊。

VB.NET鼠標(biāo)拖動(dòng)無邊框窗體改變窗體大小

在VB中,BorderStyle屬性為0的窗體沒有邊框,并且也沒有與邊框相關(guā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毫秒檢測一下鼠標(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)窗體的語句“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

VB.NET 拖動(dòng)無邊框窗體編程實(shí)例

Imports System Drawing Imports System Windows Forms ****************************************** Private oOriginalRegion As Region = Nothing 用于窗體移動(dòng) Private bFormDragging As Boolean = False Private oPointClicked As Point ****************************************** Private Sub Form _MouseDown(ByVal sender As Object ByVal e As System Windows Forms MouseEventArgs) Handles MyBase MouseDown Me bFormDragging = True Me oPointClicked = New Point(e X e Y) End Sub ****************************************** Private Sub Form _MouseUp(ByVal sender As Object ByVal e As System Windows Forms MouseEventArgs) Handles MyBase MouseUp Me bFormDragging = False End Sub ****************************************** Private Sub Form _MouseMove(ByVal sender As Object ByVal e As System Windows Forms MouseEventArgs) Handles MyBase MouseMove If Me bFormDragging Then Dim oMoveToPoint As Point 以當(dāng)前鼠標(biāo)位置為基礎(chǔ) 找出目標(biāo)位置 oMoveToPoint = Me PointToScreen(New Point(e X e Y)) 根據(jù)開始位置作出調(diào)整 oMoveToPoint Offset(Me oPointClicked X * _ (Me oPointClicked Y + _ SystemInformation CaptionHeight + _ SystemInformation BorderSize Height) * ) 移動(dòng)窗體 Me Location = oMoveToPoint End If

lishixinzhi/Article/program/ASP/201311/21755

網(wǎng)頁題目:vb點(diǎn)虐 無邊框按鈕 vb邊框類型怎么設(shè)置
轉(zhuǎn)載源于:http://bm7419.com/article40/ddehieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google云服務(wù)器、外貿(mào)網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)