求解有效菜单的个数是通用代码这里的有效菜单指的是: 这个菜单有效!!!不是无效的。。 是在没有通用代码就算了。希望有通用代码,能写一个函数,把当前的可用菜单都 求解放到一个 字符串vector<CString>中问题2:在unicode下, 我们知道,一个菜单的名字中是含有& 什么的,这些字符是unicode?
比如:剪切(&T)\tCtrl+X   这个一个菜单,中的英文字符是unicode? ansi??
之所以问这个问题,是担心, 如果在unicode下,扫描 剪切(&T)\tCtrl+X 的时候, 会出错

解决方案 »

  1.   

    1.
    GetMenuItemCount
    GetMenuItemID
    GetMenuState
    GetMenuString2. unicode 问题不用担心, 不是你想的那回事
      

  2.   

    你好, 之所以担心unicode原因:我记得以前获取过菜单名字,它其实是从Menu中获取的, 会包含\t &什么的, 所以我得扫描提出 有效字来,比如:\t &这些字符就不能够出现,对吧?既然要扫描处理, 会用指针来操作, 比如;"剪切(&T)\tCtrl+X"  在unicode下获得的完成菜单名字用指针来操作,
      

  3.   

    std::vector<CString> & GetMenuItem(CMenu *pMenu,std::vector<CString> & cs)
    {
    MENUITEMINFO mii={sizeof(MENUITEMINFO),MIIM_STATE|MIIM_SUBMENU,};
    CString cstr; int nCount = pMenu->GetMenuItemCount();
    if (nCount == 0 )
    return cs;
    for (int i =0 ;i<nCount;i++)
    {

    if (!pMenu->GetMenuItemInfo(i,&mii,TRUE) )
    AfxMessageBox(TEXT("获取菜单项失败"));
    else
    if (mii.fState != MFS_GRAYED || mii.fState != MFS_DISABLED )
    {
    pMenu->GetMenuString(i,cstr,MF_BYPOSITION);
    cs.push_back(cstr);
    if ( mii.hSubMenu  != NULL )
    {
    CMenu *ppMenu = CMenu::FromHandle(mii.hSubMenu);
    GetMenuItem(ppMenu,cs);
    }
    } } return cs;}调用 //是否有菜单
    CMenu *pMenu = AfxGetMainWnd ()->GetMenu();
    if ( pMenu == NULL )
    return; std::vector<CString> cs; GetMenuItem(pMenu,cs);
    std::vector<CString>::iterator it; for ( it = cs.begin();it != cs.end();it++)
    AfxMessageBox(*it);
      

  4.   


    为了保证代码的兼容
    我是不是该用TCHAR*来处理 你也看到 ,菜单名字后游&\t什么的(我如果不借用CString的Find函数的话)想获取CString缓冲区,然后扫描到& \t蛇什么的,另外一个问题:我发现,貌似没有法子可以做到,比如: 给ListBox 添加菜单后, 由点击某一项,然后再点击 禁止,那么该菜单就被禁止使用。我想通过发送消息来做到。。不知道能否实现??修改后,存到数据库里面,然后程序再次启动的时候去数据库里面查找,加载菜单后,顺便把某些菜单项给禁止掉不同的的用户实现操作不同的菜单。。
    只有管理员可以 有权限分配菜单操作。
      

  5.   

    不同的的用户实现操作不同的菜单。。
    只有管理员可以 有权限分配菜单操作。如果实现这个功能,就不要处理菜单名称,应该处理菜单ID才合适
    另外后台至少有人员表,人员角色,和角色对应的菜单id
    三个表,系统启动根据人员角色提取人员操作的菜单,进行权限设置。/
      

  6.   


    人员表:用户 密码  邮箱 提示问题 答案 角色
                                  1
                                  2
    人员角色表:角色  操作菜单id
    1     123
    2      234
    菜单id表菜单id  id对应的名字
    1001   粘贴
    1002   复制
    1003   退出
    是这样的三个表吗??第二个问题,,我觉得还是要处理的。之所以要处理,是因为, 要给 可以分配权限的管理员来看, 否则会 带有什么 &\t这些字符的这个不好吧
      

  7.   

    >>是这样的三个表吗??
    第三个表不合适
    角色id  菜单id id对应的名字
    123        1001 粘贴
    123         1002 复制
    123         1003 退出
    ...          ........