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
相关产品推荐
相关产品推荐

