vb.net窗口鼠標(biāo) vbs實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊

VB.NET怎么可以限制窗體不能被鼠標(biāo)隨便拖動(dòng)位置

很簡(jiǎn)單,通過(guò)WindowsAPI,刪除窗體菜單項(xiàng)就行了

創(chuàng)新互聯(lián)主營(yíng)周口網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,周口h5小程序開(kāi)發(fā)搭建,周口網(wǎng)站營(yíng)銷(xiāo)推廣歡迎周口等地區(qū)企業(yè)咨詢(xún)

首先在窗體類(lèi)中聲明API:

Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr

Declare Function RemoveMenu Lib "user32" (ByVal lngHmenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer

其次聲明API參數(shù)常量:

Const MF_BYPOSITION As Integer = H400

然后在窗體類(lèi)中寫(xiě)入過(guò)程:

Private Sub UserForm_Initialize_stopmove() '禁止窗體移動(dòng)

? Dim lngHwnd As IntPtr

? Dim lngHmenu As IntPtr

? lngHwnd = Me.Handle

? If lngHwnd 0 Then

? ? ? lngHmenu = GetSystemMenu(lngHwnd, False)

? ? ? RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '這里的0代表菜單中從上往下數(shù)第一個(gè)菜單項(xiàng)

? End If

End Sub

Private Sub UserForm_Initialize_onmove() '恢復(fù)窗體移動(dòng)

? Dim lngHwnd As IntPtr

? Dim lngHmenu As IntPtr

? lngHwnd = Me.Handle

? If lngHwnd 0 Then

? ? ? lngHmenu = GetSystemMenu(lngHwnd, True)

RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '這里的0與禁止代碼中的數(shù)值同步,原因時(shí)雖然表面上刪除了菜單項(xiàng),實(shí)則為隱藏了菜單項(xiàng),各個(gè)菜單的索引值并沒(méi)有變,所以0依然代表初始菜單的第一個(gè)菜單項(xiàng),即被刪除的那個(gè)菜單項(xiàng)

? End If

End Sub

然后如果你的窗口菜單是動(dòng)態(tài)變化的,建議聲明常數(shù):

Const MF_BYPOSITION As Integer = H0

然后使用相關(guān)的Windows功能的常數(shù)進(jìn)行刪除菜單。常數(shù)需要自行查看winuser.h頭文件

如果找不到該頭文件,可以看這里:網(wǎng)頁(yè)鏈接

其余信息詳見(jiàn)MSDN:網(wǎng)頁(yè)鏈接

最后說(shuō)一下,不建議前面網(wǎng)友說(shuō)的重寫(xiě)WndProc的方法,因?yàn)檫@樣攔截標(biāo)題欄點(diǎn)擊消息會(huì)導(dǎo)致窗體本身的菜單也無(wú)法顯示出來(lái),有損窗體功能,并且像雙擊左上角圖標(biāo)關(guān)閉窗體這樣的功能也會(huì)跟著攔截消息的操作一起被吞掉。

VB.net如何讓窗體在鼠標(biāo)點(diǎn)擊出顯示

沒(méi)聽(tīng)懂你的意思。如果你是想做一個(gè)像右鍵菜單效果的話(huà),你可以在鼠標(biāo)點(diǎn)擊事件中獲取鼠標(biāo)位置,然后創(chuàng)建你要顯示窗體的實(shí)例,把窗體的left 和 top 設(shè)成鼠標(biāo)的x,和y 坐標(biāo)就可以了,具體獲取鼠標(biāo)坐標(biāo)的方法大至有2種,一種是.net 自帶的,你找一找 Screen 這個(gè)對(duì)象中的屬性,能找到獲取鼠標(biāo)坐標(biāo)的方法,別一種就是用API函數(shù)獲取鼠標(biāo)的坐標(biāo),GetCursorPos ,該 API 具體使用方法和聲明請(qǐng)?jiān)诰W(wǎng)上查找一下。如果有什么問(wèn)題,可以再聯(lián)系我。

在VB.net中怎么獲取 鼠標(biāo)在屏幕中的坐標(biāo)

Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINTAPI) As Long '全屏坐標(biāo)聲明

Private Declare Function ScreenToClient Lib "user32.dll" (ByVal hwnd As Int32, ByRef lpPoint As POINTAPI) As Int32 '窗口坐標(biāo)聲明

Private Structure POINTAPI '聲明坐標(biāo)變量

Public x As Int32 '聲明坐標(biāo)變量為32位

Public y As Int32 '聲明坐標(biāo)變量為32位

End Structure

'以上是聲明部分

'以下是窗口部分

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick '用時(shí)鐘控件來(lái)取坐標(biāo),窗口上放個(gè)Timer組件,Enabled為允許,周期為10到100毫秒均可

Dim P As POINTAPI '聲明坐標(biāo)變量

Dim xx, yy '聲明轉(zhuǎn)換要用到的變量

GetCursorPos(P) '獲取鼠標(biāo)在屏幕中的位置

ScreenToClient(Me.Handle.ToInt32, P) '轉(zhuǎn)換為本窗體的坐標(biāo)

xx = P.x.ToString '把X轉(zhuǎn)換成能顯示到文本框的字符串格式

yy = P.y.ToString '把Y轉(zhuǎn)換成能顯示到文本框的字符串格式

TextBox1.Text = xx + "和" + yy '文本框的內(nèi)容為X坐標(biāo)和Y坐標(biāo)

End Sub

Vb.Net 怎么讓窗口隨鼠標(biāo)動(dòng)

新建一窗體FORM2,在原窗體FORM1的在mousemove事件中增加FORM2.left=XX,FORM2.TOP=YY.XX,yy是鼠標(biāo)的坐標(biāo).

分享題目:vb.net窗口鼠標(biāo) vbs實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊
分享鏈接:http://muchs.cn/article8/ddccpip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、軟件開(kāi)發(fā)、服務(wù)器托管、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站、

廣告

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

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