Sdílet prostřednictvím


CMenu::InsertMenu

Vloží nové položky nabídky na pozici určenou nPosition a ostatní položky přesunuty dolů v nabídce.

BOOL InsertMenu(
   UINT nPosition,
   UINT nFlags,
   UINT_PTR nIDNewItem = 0,
   LPCTSTR lpszNewItem = NULL 
);
BOOL InsertMenu(
   UINT nPosition,
   UINT nFlags,
   UINT_PTR nIDNewItem,
   const CBitmap* pBmp 
);

Parametry

  • nPosition
    Určuje položku nabídky, před kterým je nová položka nabídky Vložit. nFlags Parametru lze interpretovat nPosition následujícími způsoby:

    nFlags

    Výklad nPosition

    MF_BYCOMMAND

    Určuje, že parametr poskytuje ID příkazu existující položky nabídky.Toto je výchozí, pokud ani MF_BYCOMMAND ani MF_BYPOSITION je nastavena.

    MF_BYPOSITION

    Určuje, že parametr dává pozice existující položku nabídky.První položka je na pozici 0.Pokud nPosition -1, je nová položka nabídky je přidán na konec v nabídce.

  • nFlags
    Určuje, jak nPosition je interpretována a určuje informace o stavu nové položky nabídky je přidána do nabídky.Seznam příznaků, které může nastavit naleznete AppendMenu členské funkce.Pokud chcete zadat více než jednu hodnotu, použijte bitového operátoru OR kombinovat s MF_BYCOMMAND nebo MF_BYPOSITION příznak.

  • nIDNewItem
    Určuje ID příkazu nové položky nabídky nebo v případě nFlags je nastavena na MF_POPUP, popisovač nabídky (HMENU) z rozbalovací nabídky. nIDNewItem Parametr je ignorován (potřeby) nFlags je nastavena na MF_SEPARATOR.

  • lpszNewItem
    Určuje obsah nové položky nabídky.nFlagsslouží k interpretaci lpszNewItem následujícími způsoby:

    nFlags

    Výklad lpszNewItem

    MF_OWNERDRAW

    Obsahuje aplikace dodané hodnotu 32 bit, aplikace můžete spravovat další data přidružená k položce nabídky.Tato 32bitová hodnota je k dispozici v aplikaci itemData člen struktury poskytnutých WM_MEASUREITEM a WM_DRAWITEM zprávy.Tyto zprávy jsou odesílány, když je zobrazena položka nabídky nebo je změněn.

    MF_STRING

    Obsahuje dlouhý ukazatel na řetězec zakončený hodnotou null.Toto je výchozí výkladu.

    MF_SEPARATOR

    lpszNewItem Parametr je ignorován (není nutný).

  • pBmp
    Odkazuje CBitmap objekt, který bude použit jako položky nabídky.

Vrácená hodnota

Nenulová hodnota, pokud je tato funkce úspěšná. jinak 0.

Poznámky

Aplikace můžete určit stav položky nabídky nastavením hodnot v nFlags .

Vždy, když je nabídka, která nachází v okně se změní (zda je zobrazen v okně), aplikace by měla zavolat CWnd::DrawMenuBar .

Při nIDNewItem určuje rozbalovací nabídky, stane se součástí nabídky, ve které je vložen.Pokud nabídku zničení, budou také vložené nabídky zničena.Vložené nabídky by odpojili od CMenu objektu, aby se zabránilo konfliktu.

Pokud aktivní je více podřízeného okna rozhraní (MDI) dokumentu maximalizováno a aplikace vloží rozbalovací nabídky do nabídky aplikace MDI volání této funkce a určením MF_BYPOSITION příznak, je v nabídce Vložit jednu pozici dále vlevo, než bylo očekáváno.To je způsobeno řídicí nabídce aktivní podřízené okno MDI je vložen do první pozice nabídek rámeček okno MDI.V nabídce umístěte správně, musíte přidat aplikace 1 hodnota pozice, která by jinak použil.Můžete použít aplikaci WM_MDIGETACTIVE zprávy k určení, zda je aktuálně aktivní podřízené okno maximalizováno.

Příklad

// CMainFrame::OnChangeFileMenu() is a menu command handler for 
// CMainFrame class, which in turn is a CFrameWnd-derived class. 
// It modifies the File menu by inserting, removing and renaming 
// some menu items. Other operations include associating a context 
// help id and setting default menu item to the File menu. 
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnChangeFileMenu() 
{
   // Get the menu from the application window.
   CMenu* mmenu = GetMenu();

   // Look for "File" menu.
   int pos = FindMenuItem(mmenu, _T("&File"));
   if (pos == -1)
      return;

   // Remove "New" menu item from the File menu.
   CMenu* submenu = mmenu->GetSubMenu(pos);
   pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
   if (pos > -1)
      submenu->RemoveMenu(pos, MF_BYPOSITION);

   // Look for "Open" menu item from the File menu. Insert a new
   // menu item called "Close" right after the "Open" menu item.
   // ID_CLOSEFILE is the command id for the "Close" menu item.
   pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
   if (pos > -1)
      submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close"));

   // Rename menu item "Exit" to "Exit Application".
   pos = FindMenuItem(submenu, _T("E&xit"));
   if (pos > -1)
   {
      UINT id = submenu->GetMenuItemID(pos);
      submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
   }

   // Associate a context help ID with File menu, if one is not found.
   // ID_FILE_CONTEXT_HELPID is the context help ID for the File menu
   // that is defined in resource file. 
   if (submenu->GetMenuContextHelpId() == 0)
      submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID);

   // Set "Open" menu item as the default menu item for the File menu, 
   // if one is not found. So, when a user double-clicks the File
   // menu, the system sends a command message to the menu's owner 
   // window and closes the menu as if the File\Open command item had 
   // been chosen. 
   if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
   {
      pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
      submenu->SetDefaultItem(pos, TRUE);
   }
}

// FindMenuItem() will find a menu item string from the specified
// popup menu and returns its position (0-based) in the specified 
// popup menu. It returns -1 if no such menu item string is found.
int FindMenuItem(CMenu* Menu, LPCTSTR MenuString)
{
   ASSERT(Menu);
   ASSERT(::IsMenu(Menu->GetSafeHmenu()));

   int count = Menu->GetMenuItemCount();
   for (int i = 0; i < count; i++)
   {
      CString str;
      if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
         str.Compare(MenuString) == 0)
         return i;
   }

   return -1;
}

Požadavky

Záhlaví: afxwin.h

Viz také

Referenční dokumentace

Třída CMenu

Diagram hierarchie

CMenu::AppendMenu

CWnd::DrawMenuBar

CMenu::SetMenuItemBitmaps

CMenu::Detach

InsertMenu