菜单枚举记
来源:互联网 发布:广电网络突然不能上网 编辑:程序博客网 时间:2024/04/18 11:27
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
菜单枚举记
有一MDI应用程序,现假设要枚举出其能够得到系统命令响应所有菜单项的内容:如命令ID,资源名称,所在(子)菜单的句柄等,并对之进行操作。本文对此略述一二,未达意处,望各位海涵之外,以我之深度,唯与诸位共勉而已。
1、 我的迷惑
这几天修炼EnglishHelp,悟得些许正果,希望得与世人共超,尚不知是否有效,但为之而已。言归正传:
菜单项可以是菜单,反之亦然,此时菜单被称为子菜单;如果菜单项不是菜单,则它便是’纯菜单项’。以前我以为菜单中每一项都是菜单,我的思维中因此不再有菜单项的定义。可能这是个菜鸟级问题,但也可能您尚不甚解,那您不妨纸上谈兵一番,将最简单的菜单画上一画,再琢磨琢磨。
2、 菜单枚举算法
A、菜单抽象结构之一(树型抽象):
现在要访问到这棵’树’的所有叶结点并处理之,方法如B所述。
B、枚举算法(深度遍历,语法)
1. )求得当前结点的子结点数c;
2. )循环查询当前结点的I(0<=I<c)子结点信息:
若该子结点I无下级子结点,则子结点I为叶结点,按需处理后,作I=I+1,重复此步骤;
否则子结点I为分枝结点,置下级子结点为当前结点,转向1;
3.)遍历完毕。
intFindMenuItem(HMENUhmenu)//参数hmenu为分支结点资源标识
{
inti,c;
longres;
char*s=newchar[33];
MENUITEMINFOmii;
mii.cbSize=sizeof(MENUITEMINFO);
mii.fMask=MIIM_DATA|MIIM_ID|MIIM_SUBMENU|MIIM_TYPE|MIIM_STATE|MIIM_CHECKMARKS;
mii.dwTypeData=s;
c=GetMenuItemCount(hmenu);//获取当前菜单所有的菜单项数目
for(i=0;i<c;i++)
{
mii.cch=32;//注意哦!
res=GetMenuItemInfo(hmenu,i,true,&mii);
if(res==0){deletes;return-1;}//如果获取菜单信息失败
if(mii.hSubMenu==NULL)//
{
//若该菜单项非子菜单,则在此作相应处理
}
else
{
//若该菜单项为子菜单,则如此处理
res=FindMenuItem(mii.hSubMenu);//直接递归调用
if(res==-1){deletes;return-1;}
}
}
deletes;
return0;
}
intEnumMenuEndItems(HWNDhwnd)//开始遍历窗口菜单项。参数hwnd为菜单所在的窗体。
{
HMENUhmenu=GetMenu(hwnd);
if(hmenu==NULL)return–1;
returnFindMenuItem(hmenu);
}
注:此处代码仅仅描述算法。若应用到它处,根据不同的需要,Function的返回值和结点处理代码理所当然要发生改变。
附录2为上述代码的PB文本,两者略有不同,以资参考。1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
菜单枚举记
有一MDI应用程序,现假设要枚举出其能够得到系统命令响应所有菜单项的内容:如命令ID,资源名称,所在(子)菜单的句柄等,并对之进行操作。本文对此略述一二,未达意处,望各位海涵之外,以我之深度,唯与诸位共勉而已。
1、 我的迷惑
这几天修炼EnglishHelp,悟得些许正果,希望得与世人共超,尚不知是否有效,但为之而已。言归正传:
菜单项可以是菜单,反之亦然,此时菜单被称为子菜单;如果菜单项不是菜单,则它便是’纯菜单项’。以前我以为菜单中每一项都是菜单,我的思维中因此不再有菜单项的定义。可能这是个菜鸟级问题,但也可能您尚不甚解,那您不妨纸上谈兵一番,将最简单的菜单画上一画,再琢磨琢磨。
2、 菜单枚举算法
A、菜单抽象结构之一(树型抽象):
现在要访问到这棵’树’的所有叶结点并处理之,方法如B所述。
B、枚举算法(深度遍历,语法)
1. )求得当前结点的子结点数c;
2. )循环查询当前结点的I(0<=I<c)子结点信息:
若该子结点I无下级子结点,则子结点I为叶结点,按需处理后,作I=I+1,重复此步骤;
否则子结点I为分枝结点,置下级子结点为当前结点,转向1;
3.)遍历完毕。
intFindMenuItem(HMENUhmenu)//参数hmenu为分支结点资源标识
{
inti,c;
longres;
char*s=newchar[33];
MENUITEMINFOmii;
mii.cbSize=sizeof(MENUITEMINFO);
mii.fMask=MIIM_DATA|MIIM_ID|MIIM_SUBMENU|MIIM_TYPE|MIIM_STATE|MIIM_CHECKMARKS;
mii.dwTypeData=s;
c=GetMenuItemCount(hmenu);//获取当前菜单所有的菜单项数目
for(i=0;i<c;i++)
{
mii.cch=32;//注意哦!
res=GetMenuItemInfo(hmenu,i,true,&mii);
if(res==0){deletes;return-1;}//如果获取菜单信息失败
if(mii.hSubMenu==NULL)//
{
//若该菜单项非子菜单,则在此作相应处理
}
else
{
//若该菜单项为子菜单,则如此处理
res=FindMenuItem(mii.hSubMenu);//直接递归调用
if(res==-1){deletes;return-1;}
}
}
deletes;
return0;
}
intEnumMenuEndItems(HWNDhwnd)//开始遍历窗口菜单项。参数hwnd为菜单所在的窗体。
{
HMENUhmenu=GetMenu(hwnd);
if(hmenu==NULL)return–1;
returnFindMenuItem(hmenu);
}
注:此处代码仅仅描述算法。若应用到它处,根据不同的需要,Function的返回值和结点处理代码理所当然要发生改变。
附录2为上述代码的PB文本,两者略有不同,以资参考。1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 菜单枚举记
- 菜单枚举记
- 菜单枚举记
- 简单枚举IE右键菜单
- 用js枚举实现简易菜单效果
- 反射+枚举实现Select下拉菜单
- GetMenuItemInfo & InsertMenuItem 枚举和追加菜单操作
- 在Datagridview控件利用下拉菜单进行枚举数据输入
- C# 枚举类型转换字符串 Enum to string,枚举转换为下拉菜单 Enum DropDownList
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- SDK编程笔记-UNICODE篇
- 自动生成对表进行插入和更新的存储过程的存储过程
- 把人生当作程序来设计
- SDK编程笔记 — 计时器篇
- 个人简历
- 菜单枚举记
- SDK编程笔记 - DLL篇
- 登陆界面的java代码
- 关于论坛上那个SQL微软面试题。我的解答方法:-)
- 一个对Winsock 完成端口模型封装的类
- 驰骋wxWidgets系列之wxWidgets简介
- 及建模工具——ERwin简介
- 指针是C语言的灵魂
- 电信企业参与竞争的利器-数据仓库和数据挖掘