我希望实现这样一个功能
这样一个菜单:
file   edit    myself
               -》port    -》1
               -》set        2 
                             3
 myself 下面有2个子菜单,port和set,
port下面有3个子菜单,1,现在问题是,我需要每次进来重新设定当前port下面有几个菜单,
然后显示。
比如我这次进去要求port下面只显示1个菜单那么就只出现1。
2,这个动态新建的菜单按钮在点击时要能响应事件。
望大家帮忙,我正在注册新的帐号,分不够可以再加。

解决方案 »

  1.   

    就是用RemoveMenu AppendMenu DeleteMenu这些函数实现嘛
      

  2.   

    终于有人回复了,我是这么实现的
    CMenu*pMenu=this->GetMenu();
    CMenu*pmSub=pMenu->GetSubMenu(2);//2,port
    pmSub->InsertMenu(-1,MF_CHECKED|MF_STRING,100,"1");
             pmSub->InsertMenu(-1,MF_CHECKED|MF_STRING,200,"2");
             pmSub->InsertMenu(-1,MF_CHECKED|MF_STRING,300,"3"); this->DrawMenuBar();
    但是这样以后菜单变成这个样子了:
    file   edit    myself
                   -》port    
                   -》1
                   -》2
                   -》3
                   -》set        
    还有个问题就是经过this->DrawMenuBar();这个语句后,菜单要重新点开了。
      

  3.   

    添加菜单的问题已经解决,还有两个问题
    1:怎么在这个动态新建的菜单按钮在点击时要能响应事件2:还有个问题就是经过this->DrawMenuBar();这个语句后,菜单要重新点开了。有没有办法做到,动态改变了以后,菜单刷新后还是刚才那个位置。不用重新再点开菜单?
      

  4.   

    1:怎么在这个动态新建的菜单按钮在点击时要能响应事件
    声明一菜单ID范围比如2000 到 3000

    ON_COMMAND_RANGE(
    2000,
    3000,
    memberFxn ); 
    进行消息映射.2:还有个问题就是经过this->DrawMenuBar();这个语句后,菜单要重新点开了。有没有办法做到,动态改变了以后,菜单刷新后还是刚才那个位置。不用重新再点开菜单?
     为什么要DrawMenuBar? 你应该在WM_INITMENUPOPUP消息里把你的所有菜单重新构建好。
    用ON_WM_INITMENUPOPUP映射此消息响应。
      

  5.   

    1:自己手动添加消息响应就可以了嘛,用ON_COMMAND宏让消息跟消息响应函数关联起来,你自己写个消息响应函数即可,你可以看classwizard里预先弄好的菜单事件怎么响应,照里面的代码写就可以啦
    2:不太明白你说什么,DrawMenuBar是CWnd的成员函数,当你改变一个菜单时使用它,这样你的菜单才能立马显示出来,要不你需要鼠标在上面晃几晃才能显示
      

  6.   

    CMenu sortMenu;
    sortMenu.CreatePopupMenu();
    sortMenu.AppendMenu(MF_BYCOMMAND | MF_STRING | MF_ENABLED,TG::eSortForType,_T("1"));
    sortMenu.AppendMenu(MF_BYCOMMAND | MF_STRING | MF_ENABLED,TG::eSortForState,_T("2"));
    hMenu = sortMenu.GetSafeHmenu();pMenu->AppendMenu(MF_POPUP,(UINT)hMenu,_T("port"));
      

  7.   

    谢谢,这么多回复,我要一个一个研究一下再提问,顺便再阐述一下我的问题。
    在这个菜单里:
    file   edit    myself
                   -》port    
                   -》set       
                                 我希望鼠标划过port的时候进行一个事件处理,比如得到目前port只有1和2,
    那么这个事件处理完以后开始动态生成子菜单,
    最终菜单直接就变成下列的样子:
    file   edit    myself
                   -》port    -》1
                   -》set        2 
                                 3
    这就是我的根本目的。
      

  8.   

    开始这个菜单里所有内容如下:
    file   edit    myself
                   -》port    
                   -》set
    其中port没有子菜单。
    鼠标划过port的时候进行一个事件处理,比如得到目前port只有1和2,
    那么这个事件处理完以后开始动态生成子菜单,
    最终菜单直接就变成下列的样子:
    file   edit    myself
                   -》port    -》1
                   -》set        2 现在剩下的问题就是
    1 怎么在 划过port的时候进行一个事件处理,划过port是什么事件
      

  9.   

    ON_WM_INITMENUPOPUP
    谢谢高人指点。我去整理一下把处理方法写出来,大家共享。
      

  10.   

    我还有一个100分的题目
    可以到这里去回复:
    http://community.csdn.net/Expert/topic/5679/5679521.xml?temp=.995434
    你门对combobox熟悉不熟悉?
    我想实现这样一个功能
    combobox下拉以后假设有 10个内容,我鼠标划过每个内容,在旁边的静态框里就显示当前的内容。
    问题:
    1,我怎么响应鼠标划过这个事件。
      

  11.   

    我还有一个100分的题目
    可以到这里去回复:
    http://community.csdn.net/Expert/topic/5679/5679521.xml?temp=.995434
    你门对combobox熟悉不熟悉?
    -----
    广告意识很好..
    ----
    我鼠标划过每个内容..?
    ----
    什么意思..?
      

  12.   

    我广告还没发出来呢,你就知道了?哈哈,
    这个问题的100分已经有主了,所以另开了个100分的帖子。
    http://community.csdn.net/Expert/topic/5679/5679521.xml?temp=.995434
      

  13.   

    花了很多时间终于整理好了。
    发布出来大家分享,如果有遇到同样问题的网友可以借鉴一下
    vc中动态添加处理菜单事件
    http://www.dayjs.com/html/C/kjcz/20070728/7636.html感谢csdn上很多热心人和高人。再次感谢csdn上的(lyg_zy(学无止境,宁静致远)和hurryboylqs())!
    结分。
    我的另外一个问题,大家也帮忙看一下。