You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET无边框窗体实现任务栏点击最小化与还原方法

解决无边框窗体任务栏点击最小化/还原的问题

当你将FormBorderStyle设为None后,系统默认的任务栏交互逻辑会失效,需要通过重写窗体的核心方法和调整窗口样式来恢复该功能,具体实现如下:

步骤1:添加必要的窗口样式

在窗体类中重写CreateParams属性,手动添加WS_MINIMIZEBOX和WS_SYSMENU样式——这是让任务栏识别窗体支持最小化/还原的基础:

Protected Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        Dim cp As CreateParams = MyBase.CreateParams
        ' 启用最小化框样式
        cp.Style = cp.Style Or &H20000
        ' 启用系统菜单样式
        cp.Style = cp.Style Or &H80000
        Return cp
    End Get
End Property

步骤2:处理系统命令消息

重写WndProc方法,拦截Windows系统发送的WM_SYSCOMMAND消息,手动响应最小化和还原指令:

Protected Overrides Sub WndProc(ByRef m As Message)
    Const WM_SYSCOMMAND As Integer = &H112
    Const SC_MINIMIZE As Integer = &HF020
    Const SC_RESTORE As Integer = &HF120

    If m.Msg = WM_SYSCOMMAND Then
        Select Case m.WParam.ToInt32()
            Case SC_MINIMIZE
                Me.WindowState = FormWindowState.Minimized
                Return
            Case SC_RESTORE
                Me.WindowState = FormWindowState.Normal
                Return
        End Select
    End If

    MyBase.WndProc(m)
End Sub

完整窗体代码示例

将上述代码整合到你的窗体类中,最终代码如下:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Text = ""
        Me.ControlBox = False
        Me.FormBorderStyle = FormBorderStyle.None
    End Sub

    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.Style = cp.Style Or &H20000 ' WS_MINIMIZEBOX
            cp.Style = cp.Style Or &H80000 ' WS_SYSMENU
            Return cp
        End Get
    End Property

    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_SYSCOMMAND As Integer = &H112
        Const SC_MINIMIZE As Integer = &HF020
        Const SC_RESTORE As Integer = &HF120

        If m.Msg = WM_SYSCOMMAND Then
            Select Case m.WParam.ToInt32()
                Case SC_MINIMIZE
                    Me.WindowState = FormWindowState.Minimized
                    Return
                Case SC_RESTORE
                    Me.WindowState = FormWindowState.Normal
                    Return
            End Select
        End If

        MyBase.WndProc(m)
    End Sub
End Class

完成以上设置后,点击任务栏上的窗体标签即可正常触发最小化和还原操作。

内容的提问来源于stack exchange,提问作者Visula Kavinda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:27:30