Jon*_*ood 5 windows winapi mfc
我正在尝试获取一个子菜单,以便在显示之前对其进行更改。
所以我OnInitMenu()为我的窗口创建了一个处理程序。我本来打算用它pMenu->GetMenuItemInfo()来获取子菜单。
但是,这似乎行不通。为了找到我想要的菜单,我必须提供菜单命令 ID(我认为硬编码项目位置并不令人满意)。但是打开子菜单的菜单项没有命令 ID。我可以获得存在于该子菜单中的菜单命令,但是我仍然没有菜单本身。
如何在不依赖于MF_BYPOSITION?
小智 9
我对同样问题的解决方案是创建一个辅助函数来搜索菜单并根据菜单名称返回位置。
int CEnviroView::FindMenuItem(CMenu* Menu, LPCTSTR MenuName) {
int count = Menu->GetMenuItemCount();
for (int i = 0; i < count; i++) {
CString str;
if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
str.Compare(MenuName) == 0)
return i;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
看来答案是不能。使用命令 ID 来定位菜单命令非常有意义,因为当您重新排列菜单项时,此类代码将继续工作。然而,作为子菜单的菜单项根本没有命令 ID。
一种方法是使用已知的菜单命令,您可以按 ID 搜索该命令,然后在该命令旁边插入新项目。但是,您仍然需要包含菜单。
我最终使用的方法是通过研究 MFC 用于填充“文件”菜单中最近使用的文件列表的代码得出的。Microsoft Systems Journal 中 Paul DiLascia 的问答专栏中描述了一般技术,该专栏有些过时。
| 归档时间: |
|
| 查看次数: |
4004 次 |
| 最近记录: |