先声明对象以及相应常数:

        //SystemMenu对象
private SystemMenu m_systemMenu = null;
// ID 常数定义 (可变,只要不与系统冲突即可)
private const int m_AboutID = 0x100;
private const int m_ResetID = 0x101;

然后在Form或Control继承类的初始化事件中添加相应代码,如在窗体的Load事件中:

        private void Form1_Load(object sender, EventArgs e)
{
try
{
m_systemMenu = SystemMenu.FromForm(this);
// 添加一个separator ...
m_systemMenu.AppendSeparator();
//m_systemMenu.RemoveMenuItem(0);//移除"还原"菜单项
//m_systemMenu.RemoveMenuItem(3);//移除"关闭"菜单项
//m_systemMenu.RemoveMenuItem(m_systemMenu.GetMenuItemCount(this) - 2);//移除"关闭"菜单项
//本文地址:http://www.cnblogs.com/Interkey/p/SystemMenuClass.html
//禁用"关闭"菜单项以及按钮
m_systemMenu.DisableClose(this);
// 添加"关于" 菜单项
m_systemMenu.AppendMenu(m_AboutID, "关于");
// 在菜单顶部加上"复位"菜单项
m_systemMenu.InsertSeparator();
m_systemMenu.InsertMenu(, m_ResetID, "复位系统菜单");
}
catch (NoSystemMenuException err)
{
MessageBox.Show(err.Message);
}
}

本文地址:http://www.cnblogs.com/Interkey/p/SystemMenuClass.html

最后处理自定义菜单项的事件,必须重载从Form或Control继承类的WndProc函数:

首先截获WM_SYSCOMMAND消息。当用户点击系统菜单的某一项或者选择“最大化”按钮,“最小化”按钮或者“关闭”按钮时,我们要检索该消息。特别注意,消息对象的WParam参数正好包含了被点击菜单项的ID。于是可以实现如下重载:

        protected override void WndProc(ref Message m)
{
// 通过截取WM_SYSCOMMAND消息并进行处理
// 注意,消息WM_SYSCOMMAND被定义在WindowMessages枚举类中
// 消息的WParam参数包含点击的项的ID
// 该值与通过上面类的InsertMenu()或AppendMenu()成员函数传递的一样
if (m.Msg == (int)WindowMessages.wmSysCommand)
{
switch (m.WParam.ToInt32())
{
case m_ResetID: // reset菜单项的ID
{
if (MessageBox.Show(this, "\tAre you sure to reset the system menu?", "Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
// 复位系统菜单
SystemMenu.ResetSystemMenu(this);
}
} break;
case m_AboutID: // “关于”菜单项
{
MessageBox.Show(this, "作者: Interkey \n\n " + "2013-12-08 15:51:56", "关于");
} break;
// 这里可以针对另外的菜单项设计处理过程
}
} base.WndProc(ref m);
}

至此就可以了~
本文仅为记录,为以后使用方便,无别意~

本文参考了以下文章:

用C#和本地Windows API操纵系统菜单

禁止ALT+F4

使用API禁用窗体关闭按钮

SystemMenu类的用法的更多相关文章

  1. C#中timer类的用法

    C#中timer类的用法 关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类 ...

  2. C#正则表达式Regex类的用法

    C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:36891 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...

  3. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  4. android中Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  5. Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  6. android application类的用法

    android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...

  7. php class类的用法详细总结

    以下是对php中class类的用法进行了详细的总结介绍,需要的朋友可以过来参考下 一:结构和调用(实例化): class className{} ,调用:$obj = new className(); ...

  8. day319 1、正则表达式的定义及使用 2、Date类的用法 3、Calendar类的用法

    1.正则表达式的定义及使用2.Date类的用法3.Calendar类的用法 一.正则表达式 ###01正则表达式的概念和作用* A: 正则表达式的概念和作用* a: 正则表达式的概述* 正则表达式也是 ...

  9. [转]QDir类及其用法总结

    直接给出原文链接:QDir类及其用法总结

随机推荐

  1. Difference between LET and LET* in Common LISP

    Difference between LET and LET* in Common LISP   LET   Parallel binding which means the bindings com ...

  2. [GraphQL] Serve a GraphQL Schema as Middleware in Express

    If we have a GraphQL Schema expressed in terms of JavaScript, then we have a convenient package avai ...

  3. WebService SendTimeout 超时问题

    System.TimeoutException: 请求通道在等待 00:01:00 以后答复时超时.增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值.分配给此操作的时间可能是更 ...

  4. Android Studio 经常使用功能介绍

    为了简化 Android 的开发力度,Google 决定将重点建设 Android Studio 工具.Google 会在今年年底停止支持其它集成开发环境.比方 Eclipse. Android St ...

  5. PowerShell实现文件下载(类wget)

    对Linux熟悉的读者可能会对Linux通过wget下载文件有印象,这个工具功能很强大,在.NET环境下提到下载文件大多数人熟悉的是通过System.Net.WebClient进行下载,这个程序集能实 ...

  6. php中并发读写文件冲突的解决方案(文件锁应用示例)

    PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...

  7. C代码中如何调用C++ C++中如何调用C

    注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反. 集成开发环境如VC++6.0或者vs都是以文件后缀来区别当前要编译的是C代码还是C++代码,然后采用响应的编译 ...

  8. Android关于Theme.AppCompat相关问题的深入分析(转)

    http://www.jianshu.com/p/6ad7864e005e 先来看这样一个错误: No resource found that matches the given name '@sty ...

  9. 一起做RGB-D SLAM 第二季 (一)

    小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...

  10. visual studio 2013 秘钥

    #visual studio 2013# 有效密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9