每次需要显示的时候就往里面添加子菜单项;
每次隐藏的时候就
void CMyWnd::HideMenu()
{
  if (!m_pMenu) return;  UINT uIndex = 0;
  UINT uCount = m_pMenu->GetMenuItemCount();
  if (uCount == 0xFFFFFFFF)
return;
  if (uCount)
  { // 清空菜单项
     for (uIndex = uCount; uIndex != 0; uIndex--)
m_pMenu->RemoveMenu(uIndex - 1, MF_BYPOSITION);
  }
}显示时就
void CMyWnd::ShowMenu()
{
 if (!m_pMenu)
 {
    m_pMenu = new CMenu();
    m_pMenu->CreatePopupMenu();
  }
  UINT uIndex = 0;
  UINT uCount = m_pMenu->GetMenuItemCount();
  if (uCount == 0xFFFFFFFF)
return;
  if (uCount)
  { // 清空旧菜单项
     for (uIndex = uCount; uIndex != 0; uIndex--)
m_pMenu->RemoveMenu(uIndex - 1, MF_BYPOSITION);
  }  ...
  m_pMenu->AppendMenu(MF_STRING, 0, _T("菜单文字1"));  int x = 20;   // 菜单显示坐标
  int y = 30;
  m_pMenu->TrackPopupMenu(TPM_RIGHTALIGN, x, y, this);
}

解决方案 »

  1.   

    不好意思,
    显示部分的代码是拷过来的,没有整理好..
    显示时就
    void CMyWnd::ShowMenu()
    {
    if (!m_pMenu)
    {
        m_pMenu = new CMenu();
        m_pMenu->CreatePopupMenu();
      }
      UINT uIndex = 0;
      UINT uCount = m_pMenu->GetMenuItemCount();
      if (uCount && (uCount != 0xFFFFFFFF))
      {    // 清空旧菜单项
        for (uIndex = uCount; uIndex != 0; uIndex--)
        m_pMenu->RemoveMenu(uIndex - 1, MF_BYPOSITION);
      }  ...
      uIndex = 0;
      m_pMenu->AppendMenu(MF_STRING, uIndex++, _T("菜单文字1"));
      m_pMenu->AppendMenu(MF_STRING, uIndex++, _T("菜单文字2"));
      m_pMenu->AppendMenu(MF_STRING, uIndex++, _T("菜单文字3"));
      ...  int x = 20;  // 菜单显示坐标
      int y = 30;
      m_pMenu->TrackPopupMenu(TPM_RIGHTALIGN, x, y, this);
    }