CMenu::TrackPopupMenu 是 MFC(Microsoft Foundation Classes)中 CMenu 类的一个公共方法,用于在指定位置显示弹出式菜单,并等待用户选择菜单项。

以下是该方法的基本信息:
BOOL TrackPopupMenu(
   UINT nFlags,
   int x,
   int y,
   CWnd* pWnd,
   LPCRECT lpRect = NULL
);

参数说明:

  •  nFlags: 用于指定弹出式菜单的标志,如 TPM_LEFTALIGN、TPM_RETURNCMD 等。

  •  x: 菜单出现的 x 坐标。

  •  y: 菜单出现的 y 坐标。

  •  pWnd: 与菜单关联的窗口。

  •  lpRect: 一个矩形区域的指针,指定了在哪个区域内显示弹出式菜单。如果为 NULL,菜单将显示在指定的坐标上。


返回值:

  •  如果用户选择了菜单项,且指定了 TPM_RETURNCMD 标志,则返回用户选择的菜单项的标识符;否则,返回值为非零。如果用户取消菜单,返回值为零。


示例用法:
void CMyWnd::OnContextMenu(CWnd* pWnd, CPoint point)
{
    CMenu menu;
    menu.LoadMenu(IDR_CONTEXT_MENU); // 加载弹出式菜单资源

    CMenu* pSubMenu = menu.GetSubMenu(0); // 获取第一个子菜单

    // 在指定坐标显示弹出式菜单
    int nCmdID = pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RETURNCMD, point.x, point.y, this);

    if (nCmdID != 0)
    {
        // 用户选择了菜单项
        // 根据 nCmdID 进行相应的处理
        // ...
    }
    else
    {
        // 用户取消了菜单
        // ...
    }
}

在上述示例中,首先通过 LoadMenu 方法加载了一个弹出式菜单资源,并通过 GetSubMenu 方法获取了第一个子菜单。然后,通过 TrackPopupMenu 在指定坐标显示弹出式菜单,并等待用户的选择。如果用户选择了菜单项,返回值为用户选择的菜单项的标识符;如果用户取消了菜单,返回值为零。你可以根据返回值进行相应的处理。


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