Link to home
Start Free TrialLog in
Avatar of armg
armg

asked on

Dynamic Menu Options

In the following snippet of code I have created a new popup menu and added a couple menu items with AppendMenu().  The popup is then appended to the menu associated with the CFrame window of the program.  The function is called from the OnCreate() message handler of the CView class of the
program:
      
int CSigmaView::OnCreate( LPCREATESTRUCT lpCreateStruct)
{
      ...

      cCWReport.SetRptMenu(this->GetParent());
            
      ...

      return 0;
}

  When the program runs, the top-level menu option "Reports" is apparently created OK because it appears at the end of the menu bar for the frame window. When the new menu option is selected it becomes highlighted and the program appears to hang for a few seconds as though it is processing something but the popup menu never appears and no error is generated.  I have used standard command ID's for the added menu items just for the sake of creating and testing the function.

void CSigmaReport::SetRptMenu(CWnd *pWnd)
{
      CMenu *pMenu;
      CMenu cPopup;

      cPopup.CreatePopupMenu();

      cPopup.AppendMenu(MF_ENABLED|MF_STRING,                           ID_FILE_OPEN, "&Bay Details");
      cPopup.AppendMenu(MF_ENABLED|MF_STRING,                           ID_FILE_OPEN, "&Vac Details");
      pMenu = pWnd->GetMenu();

      pMenu->AppendMenu(MF_POPUP|MF_STRING,                           (UINT)cPopup.GetSafeHmenu(),
                  "&Reports");
      pWnd->DrawMenuBar();
};
ASKER CERTIFIED SOLUTION
Avatar of chensu
chensu
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial