/// <summary>
/// wpf标题栏 右键菜单 中添加新项
/// </summary>
public partial class MainWindow : Window
{
private const int WM_SYSCOMMAND = 0x112;
private const int MF_STRING = 0x0;
private const int MF_SEPARATOR = 0x800; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InsertMenuItem(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, String ipNewItem); private int SYSMENU_ABOUT_ID = 0x1;
public MainWindow()
{
InitializeComponent();
SourceInitialized += MainWindow_SourceInitialized;
} #region 给wpf标题栏的右键菜单栏 添加 “关于”菜单项
private void MainWindow_SourceInitialized(object sender, EventArgs e)
{
var handle = (new WindowInteropHelper(this)).Handle;
IntPtr hSysMenu = GetSystemMenu(handle, false);
AppendMenu(hSysMenu, MF_SEPARATOR, , String.Empty);
AppendMenu(hSysMenu, MF_STRING, SYSMENU_ABOUT_ID, "关于");
}
#endregion #region 模拟实现 winform程序中的WndProc方法
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// Handle messages...
if ((msg == WM_SYSCOMMAND) && ((int)wParam == SYSMENU_ABOUT_ID))
{
//表示监听到 关于菜单 按钮的 点击事件,并执行以下操作
System.Windows.MessageBox.Show("good");
}
return IntPtr.Zero;
}
#endregion
}

winform中的实现方式

private const int WM_SYSCOMMAND = 0x112;
private const int MF_STRING = 0x0;
private const int MF_SEPARATOR = 0x800; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InsertMenuItem(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, String ipNewItem); private int SYSMENU_ABOUT_ID = 0x1; protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e); //TestForm tsf = new TestForm();
IntPtr hSysMenu = GetSystemMenu(this.Handle, false);
AppendMenu(hSysMenu, MF_SEPARATOR, , String.Empty);
AppendMenu(hSysMenu, MF_STRING, SYSMENU_ABOUT_ID, "关于 (&A) ...");
} protected override void WndProc(ref Message m)
{
base.WndProc(ref m); if ((m.Msg==WM_SYSCOMMAND) && ((int)m.WParam==SYSMENU_ABOUT_ID))
{
TestForm testform = new TestForm();
testform.ShowDialog();
}
}

参考文章:

<a href='https://download.csdn.net/download/zxc000/8542729'>https://download.csdn.net/download/zxc000/8542729</a>
<a href='https://blog.csdn.net/DoitPlayer/article/details/72832954'>https://blog.csdn.net/DoitPlayer/article/details/72832954</a>
<a href='https://www.cnblogs.com/liunlls/p/wpf-WindowInteropHelper.html'>https://www.cnblogs.com/liunlls/p/wpf-WindowInteropHelper.html</a>
<a href='https://blog.csdn.net/lucifinil_s/article/details/6384111'>https://blog.csdn.net/lucifinil_s/article/details/6384111</a>

WPF 标题栏 右键窗口标题添加关于对话框的更多相关文章

  1. 系统右键菜单添加剪贴板清空项(隐藏DOS窗口)

    @color 0A @title 系统右键菜单添加剪贴板清空项(隐藏DOS窗口) by wjshan0808 @echo off echo 请输入右键菜单名称 set /p name= ::创建本机A ...

  2. win7下给右键菜单添加启动cmd命令

    win7下给右键菜单添加启动cmd命令 (2013-07-20 19:20:56) 转载▼ 标签: it 右键 cmd 分类: 小软件操作技巧     最近编辑器在用windows下的gvim,但进入 ...

  3. Windows下给鼠标右键菜单添加获得完全控制权限的菜单项

    这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...

  4. 《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现

    原文:<ArcGIS Engine+C#实例开发教程>第六讲 右键菜单添加与实现 摘要:在这一讲中,大家将实现TOCControl控件和主地图控件的右键菜单.在AE开发中,右键菜单有两种实 ...

  5. VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel)

    原文:VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel) private void AddRightMenu()         {            Microsoft ...

  6. 为Windows资源管理器右键菜单添加菜单项

    为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...

  7. 右键菜单添加包含ICON图片的快捷打开方式

    右键菜单添加包含ICON图片的快捷打开方式: ①保存如下代码为“submit.reg”, ②修改对应的程序地址 ③双击创建的文件,导入到注册表中,即可 Windows Registry Editor ...

  8. 【教程】鼠标右键新建添加RTF文档

    鼠标右键新建添加RTF文档 今天想将空间日志作个本地备份,但是苦于找不到适合的文本工具,因为一般的文本编辑工具都不支持贴图. 虽然word就可以满足我们的需求,但文件格式不用doc而是rtf    而 ...

  9. ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加、报错“图形符号无法序列化为 JSON”

    ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加.报错“图形符号无法序列化为 JSON” 在上一篇博文中如果在 esri:Map 里面是否设置了的UseAcc ...

随机推荐

  1. 01 DOS常用命令

    有时候没有可视化窗口,命令行对文件进行操作更方便快捷 cmd 命令弹出 dir 查看当前所在目录下的文件 ctrl+c 退出 \a 显示隐藏文件 cd /改变到根目录 dir /a 显示隐藏文件 di ...

  2. web自动化的行为驱动

    1.新建一个features包,在新建一个steps包 2.新建一个register.features文件 #coding=utf-8Feature:Register User As a develo ...

  3. 【剑指Offer】20、包含min函数的栈

      题目描述:   定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   解题思路:   使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...

  4. 洛谷P1579 哥德巴赫猜想(升级版)【水题+素数】

    1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为 ...

  5. Linux思维导图之文本工具、正则

    习题巩固: 1,找出的ifconfig"网卡名"命令结果中本机的IPv4的地址 2,查出分区空间使用率的最大百分比值 3,查出用户UID最大值的用户名,UID及壳类型 4,查出的/ ...

  6. id和class命名规范

  7. Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    目录 一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一. ...

  8. lucene_06_solr域

    solr域在家目录下面\solr_home\collection1\conf中的schema.xml里面定义. 域必须要先在schema.xml下定义后才能使用. solr在操作Field域时需要在s ...

  9. codevs——T1169 传纸条

    http://codevs.cn/problem/1169/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  10. Linux排序命令sort(转)

    Linux sort命令用于将文本文件内容加以排序.sort可针对文本文件的内容,以行为单位来排序. 语法 sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符&g ...