2014-02-17 5 views
1

В моем проекте есть меню, которое необходимо добавить в элемент динамически. В исходном коде пункты в меню являются стационарными. Таким образом, меню определяются в файле ресурсов:Как добавить динамический элемент меню после вызова CMenu :: LoadMenu?

IDM_SERVER_OPTIONS MENU DISCARDABLE 
BEGIN 
    POPUP "" 
    BEGIN 
     MENUITEM "&Connect", IDC_LAUNCHITEM_CONNECT 
     MENUITEM "&Delete", IDC_REMOVE_SERVER 
    END 
END 

и загружается в коде:

CMenu menu; 
menu.LoadMenu(IDM_SERVER_OPTIONS); 

Теперь есть новое требование о том, нужно добавить динамический пункт меню после загрузки ресурса меню. Я передал этот aricle: Dynamic menu using mfc Кругам, я написал этот код:

CMenu menu; 
menu.LoadMenu(IDM_SERVER_OPTIONS); 
CMenu *autoConnectMenu = new CMenu; 
autoConnectMenu->CreatePopupMenu(); 
autoConnectMenu->AppendMenu(MF_STRING | MF_ENABLED, 
          IDC_MENU_AUTO_CONNECT_SERVER, 
          utils::LoadString(IDS_MENU_AUTO_CONNECT_SERVER)); 
menu.AppendMenu(MF_POPUP, 
       (UINT)autoConnectMenu->m_hMenu, 
       L"auto connect server"); 

К сожалению, это не работает. Невозможно отобразить новый пункт меню «сервер автоматического подключения». Затем я попробовал функцию HMENU:

CMenu menu; 
menu.LoadMenu(IDM_SERVER_OPTIONS); 
AppendMenu((HMENU)menu.GetSubMenu(0), 
      MF_STRING | MF_ENABLED, 
      IDC_AUTO_CONNECT_SERVER, 
      utils::LoadString(IDS_MENU_AUTO_CONNECT_SERVER)); 

Он отлично работает!

Я хочу знать, в чем проблема в моем прежнем коде? Цените!

ответ

2

Я думаю, что я нашел проблему. Я должен был назвать

menu.GetSubMenu(0)->AppendMenu(...); 

вместо

menu.AppendMenu(...);