如何获取当前关注的菜单项ID?

时间:2010-02-19 20:42:41

标签: c++ windows visual-studio-2008 menubar

我想通过使用SendMessage()到我的状态栏,当我的鼠标光标在我的菜单中的项目上时显示信息。如何获取当前菜单项ID?我想他们使用与我在菜单编辑器中显示的Visual Studio相同的ID。

我在msdn上找到了这些,但似乎没有一个能满足我的需求:

WM_COMMAND
WM_CONTEXTMENU
WM_ENTERMENULOOP
WM_EXITMENULOOP
WM_GETTITLEBARINFOEX
WM_MENUCOMMAND
WM_MENUDRAG
WM_MENUGETOBJECT
WM_MENURBUTTONUP
WM_NEXTMENU
WM_UNINITMENUPOPUP

3 个答案:

答案 0 :(得分:0)

您是否尝试过使用..

GetFocus();

我认为如果我没记错的话,会返回指向控件的指针。

答案 1 :(得分:0)

当用户在菜单中移动时,您会收到WM_MENUSELECT条消息。 LOWORD(lParam)将是菜单项的ID,除非当前正在选择的是弹出窗口而不是项目。

所以你的代码看起来像这样

case WM_MENUSELECT
   {
   HMENU hmenu  = (HMENU) lParam;
   UINT  idItem = (UINT) LOWORD(wParam);
   UINT  flags  = (UINT) HIWORD(wParam);

   if (flags & MF_POPUP)
      {
      // idItem is actually a popup index
      HMENU hSubMenu = GetSubMenu(hmenu, idItem);
      idItem = 0; // assign an id to the menu, or just set to 0 for no output
      }

   // show menu info on status bar for idItem
   SendMessage(hwndStatbar, ..., idItem, ...);
   }

答案 2 :(得分:0)

(也许不是一个完整的答案,但是)你不能在资源的STRINGTABLE部分使用use字符串吗?

例如,您的菜单ID:

MENUITEM "Your Menu Item...",              IDM_YOUR_MENU_ITEM
STRINGTABLE中的

STRINGTABLE 
BEGIN
    IDM_ALL_SURFACE_PROFILE_FEATURES "Message1\nMessage2"
 END

如果记忆能很好,那么字符串的第一部分就是状态栏中显示的文字。

最大

相关问题