一、前言 .NET 框架是Windows 应用领域中一个非常新的技术,可以肯定在未来的一段时间内,.NET 应用必须与现存的Windows 技术交互作用。这种交互作用主要体现在两个领域:COM 和应用编程接口(API)。为此,.NET 框架在Windows API 之上提供了一个OO 层,但是有时候可能需要使用一个.NET 不可到达的API 调用。在这种情况下,可以使用.NET 平台调用(P/Invoke)机制从.NET 中调用C 或 C++函数。因为 Windows API 函数在DLL 中,所以,P/Invoke 为从.NET 代码调用DLL 中的C 或 C++函数提供了一种通用机制。 本文针对C# .NET 中没有提供直接的类似SystemMenu 的属性或类似GetSystemMenu 的成员函数的实际,编写了一个C#类SystemMenu,从而实现了传统的对于系统菜单的操作,这是通过调用本地Windows API 来完成的。 二、系统菜单简介 当你单击窗口图标或右击窗口标题栏时系统菜单即弹出。它包含当前窗口的默认行为。不同窗口的系统菜单看起来有些不同,如一个正常的窗口的系统菜单看起来与一个工具栏子对话框窗口的菜单就不一样。 修改系统菜单的好处: ·添加应用程序自己定义的菜单项。 ·在WW 被最小化时,SS 是一个很好的地方来放置动作,可以被存取,因为SS 可以显示,通过在任务栏窗口图标上单击右键。 ·使某菜单项失去能力,如从系统菜单中移去“最大化”,“最小化”“关闭”等。由于这种改动还影响到窗口右上角的三个按钮,所以这是一个使窗口右上角“X”失去能力的不错的办法。 操纵系统菜单 通过调用 API 函数GetSystemMenu,你就检索到了系统菜单的一个拷贝。该函数的第二个参数指明是否你要复位系统菜单到它的缺省状态。再加上另外几个API 菜单函数如AppendMenu, InsertMenu 等,你就能实现对于系统菜单的灵活控制。 下面我仅简单介绍如何添加菜单项以及如何实现新项与用户的交互。 三、SystemMenu 类介绍 SystemMenu 类的实现使得整个系统菜单存取容易许多。你可以使用这个类来修改一个窗口的菜单。 通过调用静态成员函数FromForm你得到一个对象,该函数要求一个Form 对象或一个从Form 继承的类作为它的参数。然后它创建一个新的对象,当然如果GetSystemMenu API 调用失败的话,将引发一个NoSystemMenuException 例外。 注意,每一个Windows API 菜单函数要求一个菜单句柄以利于操作。因为菜单句柄实际上是一个C++指针,所以在.NET 中你要使用IntPtr 来操作它。许多...