我用下边的方法创建了一个右键弹出菜单,可不知道怎么个它添加2级菜单(就是让它后边有小箭头,再弹出菜单)
CMenu m_pMenu;
CPoint point;
m_pMenu.CreatePopupMenu();
m_pMenu.AppendMenu(MF_STRING,M_INSERTSHIP, "将所选设备添加到");
int ShipNum=m_ShipCode.GetCount();
CString shipname;
    for (int i=1;i<ShipNum;i++)
    {
        m_ShipCode.GetLBText(i,shipname);//这句有错        m_pMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT)m_pMenu.GetSubMenu(1)->m_hMenu, shipname);    }
    GetCursorPos(&point);
    m_pMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
--------------------
“将所选设备添加到”这个菜单项可以出来,M_INSERTSHIP是我在菜单资源中创建的一个菜单的ID,我想在他后边创建子菜单,把组和框(m_ShipCode)中的项加进去,不知道为啥,老出错,大家帮忙看看,搞了半天了,郁闷啊,谢谢!!

解决方案 »

  1.   

    CMenu m_pMenu, popMenu;m_pMenu.CreateMenu();
    popMenu.CreatePopupMenu();m_pMenu.AppendMenu(.....);
    m_pMenu.AppendMenu(MF_POPUP,(UINT)popMenu.m_hMenu, "将所选设备添加到");
    m_pMenu.AppendMenu(MF_STRING, ID_ZU, "组");
      

  2.   

    按照上边的方法,运行时没有错,但弹出的是一个又窄又高的细条,代码如下:
    ------------------
    CMenu MainMenu,SubMenu;
    MainMenu.CreateMenu();
    SubMenu.CreatePopupMenu();
    MainMenu.AppendMenu(MF_POPUP,(UINT)SubMenu.m_hMenu,"添加到");
    CPoint point;
    int ShipNum=m_ShipCode.GetCount();
    CString shipname;
    if (ShipNum>1)
    {
    for (int i=1;i<ShipNum;i++)
    {
    m_ShipCode.GetLBText(i,shipname);
    MainMenu.AppendMenu(MF_STRING,10000+i,shipname);
    }
        GetCursorPos(&point);
        MainMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
    }
    ----------------------------
    是不是那里写的不对?,我要的效果就是右键在列表框中单击,弹出一个“添加到”的菜单,指向“添加到”就弹出它的2级菜单(组合框中的各个值)
      

  3.   

    我把这句MainMenu.AppendMenu(MF_POPUP,(UINT)SubMenu.m_hMenu,"添加到");
    放在了for循环之后,将for循环中的MainMenu改为了SubMenu,这样的话可以弹出二级菜单了,
    但是弹出的一级菜单却是一个细条,不是“添加到”,这是为啥?
      

  4.   

    问题已解决;
    出现窄条是因为MainMenu.CreateMenu();应该也是MainMenu.CreatePopMenu();
    多谢lixiaosan(小三)的重要的思路(框架)
    想最后请问一下:这样创建的菜单用不用考虑资源的释放问题?
      

  5.   

    只要不是new出来的,程序关闭时自动释放资源
      

  6.   

    哦,谢谢,我定义成公共变量
    Public
    CMenu MainMenu,SubMenu;
    当再次打开对话框(非模式)时,会出错,后来我在DestroyWindow()中添加了
    MainMenu.DestroyMenu();
    SubMenu.DestroyMenu();
    才解决问题,可能就是因为没有销毁,顺便问一下,我在非模式对话框中添加的tooltip控件,怎么在对话框DestroyWindow()时释放掉,我的老是因为没有释放而出错,查了很多资料,不知道tooltip怎么销毁(模式对话框好像不用考虑销毁问题)
      

  7.   

    CMenu::Detach我在非模式对话框中添加的tooltip控件,怎么在对话框DestroyWindow()时释放掉从主对话框弹出一个非模式对话框,然后关闭主对话框时,同时关闭非模态对话框?
    如果是这样的话,你需要在主对话框中检测非模态对话框的指针是否为NULL,如果不为NULL,则需在主对话框中释放非模态对话框的资源