已经得到窗口句柄,如何得到菜单句柄?
如题。
我用SPY++得不到菜单句柄,用GetMenu将窗口句柄传入也得不到。如果得到的话,我怎样才能遍历菜单中的各项?
问题点数:20、回复次数:13Top
1 楼krh2001(边城浪子)回复于 2005-05-16 18:25:10 得分 18
GetMenu 怎么会不行??
HMENU hMenu= GetMenu(hWnd);
// 遍历菜单:
EnumMenuItem(hMenu);
void EnumMenuItem(HMENU hMenu)
{
int count = GetMenuItemCount(hMenu);
for(int i = 0; i < count; ++i)
{
MENUITEMINFO mii;
MemoryZero(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_BITMAP|MIIM_CHECKMARKS|MIIM_DATA|MIIM_FTYPE|MIIM_ID|MIIM_STATE|MIIM_STRING|MIIM_SUBMENU|MIIM_TYPE; // 想读什么,就设什么标志
GetMenuItemInfo(hMenu, i, TRUE, &mii);
if(mii.hSubMenu != NULL) // 子菜单
EnumMenuItem(mii.hSubMenu);
}
}
Top
2 楼sdksdksdk(12345)回复于 2005-05-16 18:39:06 得分 0
我通过GetMenu(HWND hWnd)返回的是NULL, 没有办法再EnumMenuItem,我没有看错。
或者我不应该传入程序的主窗口?而应该是其他窗口?Top
3 楼dongmenzi(东门子)回复于 2005-05-17 08:46:29 得分 0
这个问题值得研究。Top
4 楼koko1998(高价购买火车票)回复于 2005-05-17 09:24:15 得分 0
markTop
5 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-05-17 09:24:39 得分 0
传入含菜单的窗口
用Spy++看Menu Handle有值
Top
6 楼fbmsf(FBM)回复于 2005-05-17 09:31:03 得分 2
我想的两种可能:
1 窗口没有菜单。
2 传如的是子窗口handleTop
7 楼sdksdksdk(12345)回复于 2005-05-17 09:34:33 得分 0
用spy++是可以看到Menu Handle,但窗口是主程序的窗口,而Menu Handle用GetMenu(主窗口Handle)返回是NULL.Top
8 楼OpenHero(开勇)回复于 2005-05-17 09:40:45 得分 0
看你输入的Menu Handle是否正确Top
9 楼sdksdksdk(12345)回复于 2005-05-17 09:45:51 得分 0
现在的问题是,我在程序中应该怎么Get Menu Handle,来这个Handle都得不到,我怎么验证呀?Top
10 楼krh2001(边城浪子)回复于 2005-05-17 11:28:31 得分 0
关键是,你的主窗口有 菜单 吗? 如果有的话, 一定可能得到,除非系统也出毛病了(不在讨论之列)
Top
11 楼sdksdksdk(12345)回复于 2005-05-17 12:55:06 得分 0
spy++不能把我的MENU从主窗口分离出来,我是在spy++通过监视消息发送才得到Menu Handle的。而且我发现Menu Handle所属的窗口handle也不是主窗口的。 而且这个MenuHandle所属窗口的Handle还会每次变化,郁闷中……Top
12 楼smartcomplier(坚强的泡沫)回复于 2005-05-17 13:19:18 得分 0
HMENU hMenu = GetMenu(hwnd);Top
13 楼sdksdksdk(12345)回复于 2005-05-17 16:08:09 得分 0
我能否通过Menu项的名字得到相应的id号呢?Top




