WPF 标题栏 右键窗口标题添加关于对话框
/// <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 标题栏 右键窗口标题添加关于对话框的更多相关文章
- 系统右键菜单添加剪贴板清空项(隐藏DOS窗口)
@color 0A @title 系统右键菜单添加剪贴板清空项(隐藏DOS窗口) by wjshan0808 @echo off echo 请输入右键菜单名称 set /p name= ::创建本机A ...
- win7下给右键菜单添加启动cmd命令
win7下给右键菜单添加启动cmd命令 (2013-07-20 19:20:56) 转载▼ 标签: it 右键 cmd 分类: 小软件操作技巧 最近编辑器在用windows下的gvim,但进入 ...
- Windows下给鼠标右键菜单添加获得完全控制权限的菜单项
这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...
- 《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现
原文:<ArcGIS Engine+C#实例开发教程>第六讲 右键菜单添加与实现 摘要:在这一讲中,大家将实现TOCControl控件和主地图控件的右键菜单.在AE开发中,右键菜单有两种实 ...
- VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel)
原文:VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel) private void AddRightMenu() { Microsoft ...
- 为Windows资源管理器右键菜单添加菜单项
为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...
- 右键菜单添加包含ICON图片的快捷打开方式
右键菜单添加包含ICON图片的快捷打开方式: ①保存如下代码为“submit.reg”, ②修改对应的程序地址 ③双击创建的文件,导入到注册表中,即可 Windows Registry Editor ...
- 【教程】鼠标右键新建添加RTF文档
鼠标右键新建添加RTF文档 今天想将空间日志作个本地备份,但是苦于找不到适合的文本工具,因为一般的文本编辑工具都不支持贴图. 虽然word就可以满足我们的需求,但文件格式不用doc而是rtf 而 ...
- ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加、报错“图形符号无法序列化为 JSON”
ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加.报错“图形符号无法序列化为 JSON” 在上一篇博文中如果在 esri:Map 里面是否设置了的UseAcc ...
随机推荐
- 关于JsonArray与JsonObject的使用
学习地址:http://blog.csdn.net/lishuangzhe7047/article/details/28880009 关于前台向后台传递数组(里面包含json格式) [{"i ...
- PAT_A1072#Gas Station
Source: PAT A1072 Gas Station (30 分) Description: A gas station has to be built at such a location t ...
- 51nod1046 A^B Mod C【快速幂】
给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^9) ...
- 51nod1117 聪明的木匠【贪心+优先队列】
一位老木匠需要将一根长的木棒切成N段.每段的长度分别为L1,L2,......,LN(1 <= L1,L2,-,LN <= 1000,且均为整数)个长度单位.我们认为切割时仅在整数点处切且 ...
- [luogu2576 SCOI2010] 幸运数字 (容斥原理)
传送门 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,66 ...
- Git 基础教程 之 添加远程仓库
b, 本地内容推送至远程库上 git push -u origin master 实际上是把当前分支master推送到远程仓库,第一次推送时,加上-u参数, 表示Git不 ...
- 通过请求接口的办法获得本设备IP以及IP地址
获取本设备IP接口(搜狐) http://pv.sohu.com/cityjson?ie=utf-8 result Content: { "cip": "58.21 ...
- (35)Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】
[本文章是否对你有用以及是否有好的建议,请留言] 本文章牵涉到的技术点比较多:Spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对 ...
- CODEVS——T 2618 核电站问题
http://codevs.cn/problem/2618/ 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description ...
- CodeForces - 344A Magnets (模拟题)
CodeForces - 344A id=46664" style="color:blue; text-decoration:none">Magnets Time ...