在C++中检索Windows中的菜单项列表
Retrieve list of menu items in Windows in C++
我正在尝试在桌面应用程序中实现菜单项搜索。我希望用户能够在搜索框中键入任何菜单项字符串,并直接从搜索结果中调用该菜单项。这将类似于mac中的菜单搜索。如何检索应用程序的菜单项列表。
这里有一个代码片段,您可以根据需要进行修改:
void InterateMenu(HMENU hMenu)
{ MENUITEMINFO mii;
int i, nCount = GetMenuItemCount(hMenu);
for (i = 0; i < nCount; i++)
{ memset (&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_ID; // | MIIM_STATE
if (!GetMenuItemInfo(hMenu, i, TRUE, &mii))
continue;
if ((mii.fType & MFT_STRING) != 0 && mii.cch > 0)
{ mii.cch++;
TCHAR *pString = (TCHAR *) malloc(mii.cch * sizeof(TCHAR));
if (pString != NULL)
{ if (!GetMenuItemInfo(hMenu, i, TRUE, &mii))
{ free(pString);
continue;
}
TRACE(_T("ID = %u, string = %sn"), mii.wID, pString);
free(pString);
}
}
if (mii.hSubMenu != NULL)
InterateMenu(mii.hSubMenu); // ** recursive **
}
}
使用主菜单句柄调用函数。
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 一对向量构造函数:初始值设定项列表与显式构造
- 将大括号括起来的初始值设定项列表作为结构返回
- 如何防止初始值设定项列表中的错误值?
- 范围 v3 可以包含初始值设定项列表的工作吗?
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 调用重载的"<大括号括起来的初始值设定项列表>"对于对来说就足够了是模棱两可的
- 将异类初始值设定项列表传递给流运算符
- 传递空初始值设定项列表时使用右值和左值引用候选项的重载解析
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 初始值设定项列表构造和静态断言
- 使用大括号初始化 std::vector 使用初始值设定项列表
- 在 C++11 及更高版本中,有没有办法初始化初始值设定项列表中的向量?
- std::map, std::unordered_map - 缩小初始值设定项列表中的转换范围
- 扩展初始值设定项列表和未初始化的成员
- 采用初始值设定项列表的构造函数
- 无法从"初始值设定项列表"转换为模板<int>
- 难以从 CImageList 设置菜单项位图
- 在C++中检索Windows中的菜单项列表