GetMenuItemInfo倒底怎么用!!

花熊 2011-10-24 12:35:49
得到了系统菜单的m_hMenu;,想要获得它的每一项的文字,发现只要是有小图标的,用GetMenuString都无效,用GetMenuItemInfo也不行,求GetMenuItemInfo的详细用法,贴代码就行了,能取得有小图标的项的文字就行了!!!!!!!!!,在线等高手。
...全文
569 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
花熊 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hgy413 的回复:]
引用 10 楼 xianglitian 的回复:
GetMenuString你怎么用的
我这样写

C/C++ code

pSysMenu->GetMenuString(1, strItem, MF_BYPOSITION);

可以得到系统菜单的内容
win7系统

TCHAR sz[255] = {0};
GetMenuString(m_hMenu, i, sz, 25……
[/Quote]
邮箱80718901@qq.com,求能显示新建的子项菜单及菜单左边图标的方法(前提:已hook到菜单句柄),多少分都愿给,这个问题我尝试了很久都无法解决
花熊 2011-11-10
  • 打赏
  • 举报
回复
现在我只能采用替换颜色法来对系统弹出菜单绘制,但这样有很大限制,比如分隔线和灰掉字体是一个颜色,没法分开处理,这个问题有没有高手能解决啊,分享下点思路????
向立天 2011-10-26
  • 打赏
  • 举报
回复
我在win7下打开你的demo直接就是好用的的
我到xp下再试试吧
梦境传说 2011-10-26
  • 打赏
  • 举报
回复
CMenu::GetMenuItemInfo

BOOL GetMenuItemInfo(UINT nIDItem, LPMENUITEMINFO lpMenuItemInfo, BOOL ByPos=FALSE)

返回值:
如果成功,则返回值为非零,否则为0。如果要获取扩展的错误信息,请使用Win32函数GetLastError,如联机文档“平台SDK” 中所述。

参数:
nIDItem 要获取信息菜单项的标识符或位置。该参数的意义依赖于ByPos的值。
lpMenuItemInfo 指向MENUITEMINFO结构的指针,如联机文档“平台SDK”中所述,它包含了菜单的有关信息。
ByPos 该值指定了nIDItem的意义。缺省情况下,ByPos是FALSE,它指定uItem为菜单项标识符。若ByPos没有设置为FALSE,那么它标识了菜单项的位置。

说明:
该成员函数实现了Win32函数GetMenuItemInfo的功能,如同联机文档“平台SDK”中所描述的。
注意,在GetMenuItemInfo的MFC实现中,没有使用菜单的句柄。
梦境传说 2011-10-26
  • 打赏
  • 举报
回复
#if(WINVER >= 0x0500)

#define MIIM_STRING 0x00000040

#enfif



CMenu*menu = GetMenu();

MENUITEMINFO info;

ZeroMemory(&info,sizeof(MENUITEMINFO));

info.cbSize = sizeof(MENUITEMINFO);

info.fMask = MIIM_TYPE|MIIM_STRING;

//info.fType = MFT_STRING;

menu->GetMenuItemInfo(0,&info,TRUE);


CString title(info.dwTypeData);

AfxMessageBox(title);
梦境传说 2011-10-26
  • 打赏
  • 举报
回复
#if(WINVER >= 0x0500)

#define MIIM_STRING 0x00000040

#enfif



CMenu*menu = GetMenu();

MENUITEMINFO info;

ZeroMemory(&info,sizeof(MENUITEMINFO));

info.cbSize = sizeof(MENUITEMINFO);

info.fMask = MIIM_TYPE|MIIM_STRING;

//info.fType = MFT_STRING;

menu->GetMenuItemInfo(0,&info,TRUE);



CString title(info.dwTypeData);

AfxMessageBox(title);
花熊 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xianglitian 的回复:]
我在win7下打开你的demo直接就是好用的的
我到xp下再试试吧
[/Quote]
在win7下新建那一项的子菜单能正常显示?
还有那个每一项的前置图标怎么才能抓到啊?
花熊 2011-10-25
  • 打赏
  • 举报
回复
怀疑新建的子项全是图片,但怎么通过m_HMenu来取得对应菜单项的图片,用


memset(&mi, 0, sizeof(mi));
mi.cbSize = sizeof(MENUITEMINFO);
mi.fMask = MIIM_BITMAP;
//CBitmap bmp;
//mi.hbmpItem = bmp;
::GetMenuItemInfo(m_hMenu, i, TRUE, &mi);

取得的mi.hbmpItem 全是oxfffff,估计代码用错了,求真象!!.
花熊 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xianglitian 的回复:]
GetMenuString你怎么用的
我这样写

C/C++ code

pSysMenu->GetMenuString(1, strItem, MF_BYPOSITION);

可以得到系统菜单的内容
win7系统
[/Quote]
TCHAR sz[255] = {0};
GetMenuString(m_hMenu, i, sz, 255, MF_BYPOSITION);
有小图标的菜单抓不到!!!
向立天 2011-10-25
  • 打赏
  • 举报
回复
GetMenuString你怎么用的
我这样写
pSysMenu->GetMenuString(1, strItem, MF_BYPOSITION);

可以得到系统菜单的内容
win7系统
向立天 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hgy413 的回复:]
引用 13 楼 xianglitian 的回复:
方不方便做个小例子发我邮箱
xianglitian1983@163.com
已发Demo,向哥帮看下,白天邮件被屏蔽了!
[/Quote]
收到
希望能帮上忙吧
花熊 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xianglitian 的回复:]
方不方便做个小例子发我邮箱
xianglitian1983@163.com
[/Quote]已发Demo,向哥帮看下,白天邮件被屏蔽了!
向立天 2011-10-25
  • 打赏
  • 举报
回复
方不方便做个小例子发我邮箱
xianglitian1983@163.com
gold_water 2011-10-24
  • 打赏
  • 举报
回复
应该要有两个类,一个是menu类,还有一个好像是菜单项的类,具体名字记不清楚了,你查一下,2个协作可以实现你的要求。
cocoabird 2011-10-24
  • 打赏
  • 举报
回复
HMENU hMenu = (HMENU)0x00EA00F3;
MENUITEMINFO mii = {0};
mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_SUBMENU | MIIM_DATA;
mii.fType = MFT_STRING;
mii.cch = 256;
mii.dwTypeData = (char*)malloc(sizeof(char)*mii.cch);
if(::GetMenuItemInfo(hMenu, 0, true, &mii))
{
AfxMessageBox(mii.dwTypeData);
}
free(mii.dwTypeData);

LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
::MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
::LocalFree( lpMsgBuf );


花熊 2011-10-24
  • 打赏
  • 举报
回复
人呢,都别潜水了
花熊 2011-10-24
  • 打赏
  • 举报
回复
已知条件为菜单的句柄HMENU
求:菜单任一项的图标句柄HBITMAP
花熊 2011-10-24
  • 打赏
  • 举报
回复
既然有SetMenuItemBitmaps,那有没有方式得到这个图片,换一种方式问:怎么得到菜单某一项的图标,给个代码,
skype413 2011-10-24
  • 打赏
  • 举报
回复
up~~~~~~~
花熊 2011-10-24
  • 打赏
  • 举报
回复
大牛出来,祖国召唤你们。
加载更多回复(2)
代码下载地址: https://pan.quark.cn/s/068306a56640 在交通运输科学范畴内,交通流量分配是探讨交通系统内交通负荷如何在各个道路路段间进行合理分配的核心议题。交通流分配技术主要应用于模拟和推演交通系统的运行状态,旨在为城市规划人员与交通工程师提供优化道路布局的参考,进而缓解交通拥堵现象,提升道路交通的整体效能。以下将对"交通流分配技术"进行深入阐述: 1. **全部或无分配(All-or-Nothing Distribution)** 全部或无分配是一种基础的交通流分配策略。该技术依据最短路径准则,预设所有从发源地(Origin)至目的地(Destination)的车辆都将选择路程最短的路线。倘若存在多条等长路径,则采用随机方式确定其中一条。此类方法未将交通拥堵因素纳入考量,因为一旦选定路径,便假定所有交通量将沿此路径通行,即便这可能导致部分路段出现超负荷状况。 2. **逐步分配(Progressive Assignment)** 逐步分配技术顾及了交通网络的动态特征。该算法通过逐步优化流量配置,力求使网络内行驶的总代价(诸如通行时间、距离等指标)最小化。运算过程始于初始的全部或无分配状态,随后逐步修正路径选择,直至网络达成稳定状态,即每次流量修正后,总代价的变动幅度不再明显。此方法更贴近现实交通场景,因为车辆会依据即时路况选择最优路径。 3. **迭代平均分配(Iterative Average Distribution)** 迭代平均分配是一种对逐步分配技术的优化版本,其更侧重于实现网络流量的均衡化。在每一轮迭代过程中,算法不仅评估当前路径的优化程度,同时参考前一次迭代的流量配置。通过融入平均化理念,该方法能更有效地分散交通...

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧