C#+WindowsAPI *** 纵系统菜单

C#+WindowsAPI *** 纵系统菜单,第1张

一、前言

本文针对C#.net中没有提供直接的类似SystemMenu的属性或类似GetSystemMenu的成员函数的情况,通过调用Windows API设计了一个C#类SystemMenu,从而实现了传统的对于系统菜单的 *** 作。

二、系统菜单简介

当你单击窗口图标或右击窗口标题栏时系统菜单即d出。它包含当前窗口的默认行为。不同窗口的系统菜单看起来有些不同,如一个正常窗口的系统菜单看起来与一个工具栏子对话框窗口的菜单就不一样。

修改系统菜单的好处:

·添加应用程序自己定义的菜单项。

·在WW被最小化时,SS是一个很好的地方来放置动作,可以被存取,因为SS可以显示,通过在任务栏窗口图标上单击右键。

·使某菜单项失去能力,如从系统菜单中移去“化”,“最小化”“关闭”等。由于这种改动还影响到窗口右上角的三个按钮,所以这是一个使窗口右上角“X”失去能力的不错的办法。

*** 纵系统菜单

通过调用 API函数GetSystemMenu,你就检索到了系统菜单的一个拷贝。该函数的第二个参数指明是否你要复位系统菜单到它的缺省状态。再加上另外几个API菜单函数如AppendMenu, InsertMenu等,你就能实现对于系统菜单的灵活控制。

下面我仅简单介绍如何添加菜单项以及如何实现新项与用户的交互。

三、SystemMenu 类介绍

SystemMenu类的实现使得整个系统菜单存取变得非常容易。你可以使用这个类来修改一个窗口的菜单。 通过调用静态成员函数FromForm你得到一个对象,该函数要求一个Form对象或一个从Form继承的类作为它的参数。然后它创建一个新的对象,当然如果GetSystemMenu API调用失败的话,将引发一个NoSystemMenuException例外。

注意,每一个Windows API菜单函数要求一个菜单句柄以利于 *** 作。因为菜单句柄实际上是一个C++指针,所以在.NET中你要使用IntPtr来 *** 作它。许多函数还需要一个位掩码标志来指明新菜单项的动作或形式。幸运的是,你不必象在VC++中那样,通过某个头文件的包含来使用一系列的位掩码标志定义,.NET中已经提供了一个现成的公共枚举类ItemFlags。下面对这个类的几个重要成员作一说明:

·mfString―― 告诉子系统将显示由菜单项中的“Item”参数传递的字符串。

·mfSeparator――此时 "ID" 与 "Item" 参数被忽略。

·MfBarBreak―― 当用于菜单条时,其功能与mfBreak一样;当用于下拉菜单,子菜单或快捷菜单时,新的一列与旧有的一列由一线垂直线所隔开。

·MfBreak――把当前项目放在一个新行(菜单条)或新的一列(下拉菜单,子菜单或快捷菜单)。

注意:如果指定多个标志,应该用位 *** 作运算符|(或)连接。例如:

//将创建一个菜单项 "Test" ,且该项被选中(checked)

mySystemMenu.AppendMenu(myID, "Test", ItemFlags.mfString |ItemFlags.mfChecked)

“Item”参数指定了新项中要显示的文本,其ID必须是的数字――用来标志该菜单项。

注意:确保新项的ID大于0小于0XF000。因为大于等于0XF000的范围为系统命令所保留使用。你也可以调用类SystemMenu的静态方法VerifyItemID来核验是否你的ID正确。

另外,还有两个需要解释的常量:mfByCommand和mfByPosition。

第一,在缺省情况下,使用mfByCommand。第二,“Pos”的解释依赖于这些标志:如果你指定mfByCommand,“Pos”参数就是在新项目插入前项目的ID;如果你指定mfByPosition,“Pos”参数就是以0索引为开头的新项的相对位置;如果是-1并且指定mfByPosition,该项目将被插入到最后。这也正是为什么AppendMenu()可以为InsertMenu()所取代的原因。

比如messagebox()这个API函数在WINDOWS.H文件中

strlen在stdio.h文件中

简单的写一个API

#include "windows.h"

#include "windowsx.h"

WinMain(这里有六个数)

{

MessageBox(NULL,"","编程世界",MB_YESNO)

}

Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位的应用程序编程接口。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11894690.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存