在 MFC 中,CMenu 类确实没有 CMenu::TrackPopupMenuEx 这个具体的公共方法。TrackPopupMenuEx 是 Windows API 中的一个函数,不是 CMenu 类的方法。

TrackPopupMenuEx 函数用于在指定的位置显示弹出菜单,并提供更多的控制选项。如果你需要使用 TrackPopupMenuEx,可以直接调用它而不是调用 CMenu 的方法。以下是 TrackPopupMenuEx 函数的一般用法:
BOOL TrackPopupMenuEx(
  HMENU hMenu,
  UINT  fuFlags,
  int   x,
  int   y,
  HWND  hWnd,
  LPTPMPARAMS lptpm
);

  •  hMenu: 菜单句柄,即你要显示的菜单。


  •  fuFlags: 控制菜单的外观和行为的标志,例如 TPM_LEFTALIGN、TPM_RIGHTBUTTON 等。


  •  x 和 y: 指定弹出菜单的屏幕坐标。


  •  hWnd: 跟踪弹出菜单的窗口句柄。


  •  lptpm: 一个指向 TPMPARAMS 结构的指针,该结构用于更精确地控制菜单的显示位置。


例如,以下是一个简单的示例:
HMENU hMenu = ::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MYMENU));
TPMPARAMS tpmParams = { sizeof(TPMPARAMS) };

tpmParams.rcExclude.left = x;  // 指定弹出菜单的左边缘
tpmParams.rcExclude.top = y;   // 指定弹出菜单的顶部

TrackPopupMenuEx(GetSubMenu(hMenu, 0), TPM_LEFTALIGN | TPM_TOPALIGN, x, y, GetSafeHwnd(), &tpmParams);

在这个示例中,我们首先加载了菜单资源,然后使用 TrackPopupMenuEx 函数显示菜单,并通过 TPMPARAMS 结构来指定更精确的显示位置。


转载请注明出处:http://www.pingtaimeng.com/article/detail/18968/MFC/CMenu