随便生成一个SDI,自定义一个ToolBar按键,由如下函数响应COMMAND:void CMainFrame::OnChange() 
{
// TODO: Add your command handler code here
CString m_sText;
CMenu* m_mymenu=GetMenu();
CMenu* m_mypopup=m_mymenu->GetSubMenu(0);
m_mymenu->GetMenuString(0,m_sText,MF_BYPOSITION);
m_mymenu->RemoveMenu(0,MF_BYPOSITION);
m_mymenu->InsertMenu(3,MF_BYPOSITION¦MF_POPUP¦MF_STRING,
(UINT)m_mypopup->m_hMenu,m_sText);
DrawMenuBar();
}
 

解决方案 »

  1.   

    处理这一消息:WM_INITMENU
    先把原的来项全部DleteMenu,然后再用
    InsertMenu添上你所有的要显示的。
      

  2.   

    编一个ActiveX接口实现菜单命令,调用时通过CallByName实现。“华微钢筋自动计算”(软件下载)软件使用了此技术,实现了Office的Commandbar和宏的连接功能。http://expert.csdn.net/Topic/11311.shtm
      

  3.   


        使用AppendMenu或InsertMenu加入新菜单项时为菜单项分配了ID号。这样,当用户按下某个菜单项,会发出一个WM_COMMAND消息,而菜单项的ID号,就包含在参数wParam的低位中.BOOL CYourView::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    UINT m_nItemID=LOWORD(wParam);
    if (m_nItemID==ID_YOURITEM){    //ID_YOURITEM为你加入菜单项时指定的ID号
        //在这里放入响应的代码
    }
    return CScrollView::OnCommand(wParam, lParam);
    }
      

  4.   

    最好用ON_COMMAND_RANGE来映射命令处理函数,可以在
    一个函数中处理一个范围内的所有消息