GetMenuItemInfo倒底怎么用!!

花熊 2011-10-24 12:35:49
得到了系统菜单的m_hMenu;,想要获得它的每一项的文字,发现只要是有小图标的,用GetMenuString都无效,用GetMenuItemInfo也不行,求GetMenuItemInfo的详细用法,贴代码就行了,能取得有小图标的项的文字就行了!!!!!!!!!,在线等高手。
...全文
501 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)

16,467

社区成员

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

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

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