自定义标题栏右键菜单

Posted 皮特胖胖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义标题栏右键菜单相关的知识,希望对你有一定的参考价值。

摘自:http://stackoverflow.com/questions/4615940/how-can-i-customize-the-system-menu-of-a-windows-form

在单击窗体左上角图标,或标题栏右击时,显示自定义菜单

 

Imports System.Windows.Forms
Imports System.Runtime.InteropServices

Public Class CustomForm
    Inherits Form
    \' P/Invoke constants
    Private Const WM_SYSCOMMAND As Integer = &H112
    Private Const MF_STRING As Integer = &H0
    Private Const MF_SEPARATOR As Integer = &H800

    \' P/Invoke declarations
    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    Private Shared Function GetSystemMenu(hWnd As IntPtr, bRevert As Boolean) As IntPtr
    End Function

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    Private Shared Function AppendMenu(hMenu As IntPtr, uFlags As Integer, uIDNewItem As Integer, lpNewItem As String) As Boolean
    End Function

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    Private Shared Function InsertMenu(hMenu As IntPtr, uPosition As Integer, uFlags As Integer, uIDNewItem As Integer, lpNewItem As String) As Boolean
    End Function


    \' ID for the About item on the system menu
    Private SYSMENU_ABOUT_ID As Integer = &H1

    Public Sub New()
    End Sub

    Protected Overrides Sub OnHandleCreated(e As EventArgs)
        MyBase.OnHandleCreated(e)

        \' Get a handle to a copy of this form\'s system (window) menu
        Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)

        \' Add a separator
        AppendMenu(hSysMenu, MF_SEPARATOR, 0, String.Empty)

        \' Add the About menu item
        AppendMenu(hSysMenu, MF_STRING, SYSMENU_ABOUT_ID, "&About…")
    End Sub

    Protected Overrides Sub WndProc(ByRef m As Message)
        MyBase.WndProc(m)

        \' Test if the About item was selected from the system menu
        If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32 = SYSMENU_ABOUT_ID Then
            MessageBox.Show("Custom About Dialog")
        End If
    End Sub
End Class

  

以上是关于自定义标题栏右键菜单的主要内容,如果未能解决你的问题,请参考以下文章

Delphi中无边框窗体应用程序使任务栏右键菜单有效的方法

HTML代码片段

HTML代码片段

自定义 NSMenu(如 Apple 的 Dock 右键菜单)?

自定义右键菜单

如何在离线绘图上自定义或禁用右键菜单?