VB.NET怎么可以限制窗体不能被鼠标随便拖动位置

VB.NET怎么可以限制窗体不能被鼠标随便拖动位置?就是说我确定了这个程序运行后他的窗体位置(在屏幕左上角),而这个窗体是不能被鼠标随意移动到屏幕其他地方???补充一下:... VB.NET怎么可以限制窗体不能被鼠标随便拖动位置?
就是说我确定了这个程序运行后他的窗体位置(在屏幕左上角),而这个窗体是不能被鼠标随意移动到屏幕其他地方???
补充一下:这个窗体是有边框和标题栏的
展开
 我来答
百度网友dac3ae4b8
2020-03-20
知道答主
回答量:4
采纳率:0%
帮助的人:1.2万
展开全部

很简单,通过WindowsAPI,删除窗体菜单项就行了


首先在窗体类中声明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参数常量:

Const MF_BYPOSITION As Integer = &H400

然后在窗体类中写入过程:

    Private Sub UserForm_Initialize_stopmove() '禁止窗体移动

        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代表菜单中从上往下数第一个菜单项

        End If

    End Sub

    Private Sub UserForm_Initialize_onmove() '恢复窗体移动

        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与禁止代码中的数值同步,原因时虽然表面上删除了菜单项,实则为隐藏了菜单项,各个菜单的索引值并没有变,所以0依然代表初始菜单的第一个菜单项,即被删除的那个菜单项

        End If

    End Sub


然后如果你的窗口菜单是动态变化的,建议声明常数:

Const MF_BYPOSITION As Integer = &H0

然后使用相关的Windows功能的常数进行删除菜单。常数需要自行查看winuser.h头文件

如果找不到该头文件,可以看这里:网页链接

其余信息详见MSDN:网页链接


最后说一下,不建议前面网友说的重写WndProc的方法,因为这样拦截标题栏点击消息会导致窗体本身的菜单也无法显示出来,有损窗体功能,并且像双击左上角图标关闭窗体这样的功能也会跟着拦截消息的操作一起被吞掉。

然后去远足
推荐于2018-04-11 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2434万
展开全部

完美的解决方法是去掉系统自带的边框和标题栏(也就是 FormBorderStyle 设为 None),然后重绘出边框和标题栏。

 

其次一点的解决方法是重写窗体的 WndProc 事件,拦截点击标题栏时的系统消息。

 

最简单的解决方法还是写 WndProc 事件,强制给 Me.Location 赋值成 Point.Empty。缺点是如果要拖动窗体的话会有抖动。

 

参考:

Protected Overrides Sub WndProc(ByRef m As Message)
    If (Me.Location <> Point.Empty) Then Me.Location = Point.Empty
    MyBase.WndProc(m)
End Sub
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式