1

当我的鼠标光标位于菜单中的某个项目上时,我想通过使用 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
4

3 回答 3

0

你试过用..

GetFocus();

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

于 2010-02-19T20:46:35.353 回答
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, ...);
   }
于 2010-02-19T20:56:36.157 回答
0

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

例如,对于您的菜单 ID:

MENUITEM "Your Menu Item...",              IDM_YOUR_MENU_ITEM

在 STRINGTABLE 中

STRINGTABLE 
BEGIN
    IDM_ALL_SURFACE_PROFILE_FEATURES "Message1\nMessage2"
 END

如果我没记错的话,字符串的第一部分将是状态栏中显示的文本。

最大限度。

于 2010-02-19T20:57:15.567 回答