求解有效菜单的个数是通用代码这里的有效菜单指的是: 这个菜单有效!!!不是无效的。。 是在没有通用代码就算了。希望有通用代码,能写一个函数,把当前的可用菜单都 求解放到一个 字符串vector<CString>中问题2:在unicode下, 我们知道,一个菜单的名字中是含有& 什么的,这些字符是unicode?
比如:剪切(&T)\tCtrl+X 这个一个菜单,中的英文字符是unicode? ansi??
之所以问这个问题,是担心, 如果在unicode下,扫描 剪切(&T)\tCtrl+X 的时候, 会出错
比如:剪切(&T)\tCtrl+X 这个一个菜单,中的英文字符是unicode? ansi??
之所以问这个问题,是担心, 如果在unicode下,扫描 剪切(&T)\tCtrl+X 的时候, 会出错
GetMenuItemCount
GetMenuItemID
GetMenuState
GetMenuString2. unicode 问题不用担心, 不是你想的那回事
{
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);
为了保证代码的兼容
我是不是该用TCHAR*来处理 你也看到 ,菜单名字后游&\t什么的(我如果不借用CString的Find函数的话)想获取CString缓冲区,然后扫描到& \t蛇什么的,另外一个问题:我发现,貌似没有法子可以做到,比如: 给ListBox 添加菜单后, 由点击某一项,然后再点击 禁止,那么该菜单就被禁止使用。我想通过发送消息来做到。。不知道能否实现??修改后,存到数据库里面,然后程序再次启动的时候去数据库里面查找,加载菜单后,顺便把某些菜单项给禁止掉不同的的用户实现操作不同的菜单。。
只有管理员可以 有权限分配菜单操作。
只有管理员可以 有权限分配菜单操作。如果实现这个功能,就不要处理菜单名称,应该处理菜单ID才合适
另外后台至少有人员表,人员角色,和角色对应的菜单id
三个表,系统启动根据人员角色提取人员操作的菜单,进行权限设置。/
人员表:用户 密码 邮箱 提示问题 答案 角色
1
2
人员角色表:角色 操作菜单id
1 123
2 234
菜单id表菜单id id对应的名字
1001 粘贴
1002 复制
1003 退出
是这样的三个表吗??第二个问题,,我觉得还是要处理的。之所以要处理,是因为, 要给 可以分配权限的管理员来看, 否则会 带有什么 &\t这些字符的这个不好吧
第三个表不合适
角色id 菜单id id对应的名字
123 1001 粘贴
123 1002 复制
123 1003 退出
... ........