nSelectedItem获取的值一直为-1,检查上述代码
时间: 2024-02-26 09:57:57 浏览: 50
非常抱歉,我的回答又有误。在上述代码中,nSelectedItem 始终为 -1 的原因是,它没有被正确地初始化。您需要将它初始化为 GetMenuItemCount 返回的值减去菜单项中的分隔符和禁用项的数量。以下是修正后的代码:
```cpp
CMenu* pMenu = GetMenu();
if (pMenu != NULL)
{
UINT uState = pMenu->GetMenuState(nID, MF_BYCOMMAND);
// 检查菜单项是否被选中
if ((uState & MF_CHECKED) != 0)
{
// 获取当前选中菜单项的序号
int nMenuItemCount = pMenu->GetMenuItemCount();
int nSelectedItem = nMenuItemCount - pMenu->GetMenuItemCount(MF_BYPOSITION | MF_SEPARATOR) - pMenu->GetMenuItemCount(MF_BYPOSITION | MF_DISABLED);
for (int i = 0; i < nMenuItemCount; i++)
{
if ((uState = pMenu->GetMenuState(i, MF_BYPOSITION)) != 0 && (uState & MF_CHECKED) != 0)
{
nSelectedItem = i - pMenu->GetMenuItemCount(MF_BYPOSITION | MF_SEPARATOR) - pMenu->GetMenuItemCount(MF_BYPOSITION | MF_DISABLED);
break;
}
}
// 在这里使用 nSelectedItem
}
}
```
请注意,现在我们通过减去分隔符和禁用项的数量来初始化 nSelectedItem,然后在循环中根据选中的菜单项的位置来更新它。
阅读全文