我正在使用Visual C ++ 6.0开发项目,我需要能够启用或禁用某些菜单项,具体取决于分配给当前登录用户的权限。这是我正在使用的代码:
// If the currently logged in user doesn't have permission to edit invoices
if (!((CMyApp *)AfxGetApp())->UserHasPermission(PERMISSION_EditInvoice))
{
// Disable the Edit Menu
pMain->EnableMenuItem(1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
}
else
{
// Enable the Edit Menu
pMain->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED);
}
它完全符合我的要求,但我正在努力找到最好的地方。如果我把它放在OnInitialUpdate()
中,我会得到我想要的结果,但仅限于打开的第一张发票。如果在未关闭并重新打开对话框的情况下打开第二张发票,则不会再次执行代码。打开不同的发票时未调用OnUpdate()
,而我找到的唯一有效的地方是OnDraw()
,OnDraw()
的问题是菜单项在视觉上不可见将状态从灰色显示更改为启用,反之亦然,直到您尝试单击它为止。
答案 0 :(得分:0)
我认为您必须在程序中包含此代码
void check_user_permission();
比发生此事件时必须调用它:
- OnInitialUpdate()
- new user login (if your software permits user login/logout during the same session)
- new invoice opened
有帮助吗?
答案 1 :(得分:0)
我最终决定禁用Edit Invoice
菜单项,而不是Edit
菜单本身。这被证明更容易和更清洁,因为它确定权限,并在每次打开主'Edit
菜单时启用或禁用项目。
void CViewInvoiceView::OnUpdateEditEditinvoice(CCmdUI* pCmdUI)
{
// If the currently logged in user doesn't have permission to edit invoices
if (!((CJ3App *)AfxGetApp())->UserHasPermission(PERMISSION_EditInvoice))
{
// Disable the Edit Menu
pCmdUI->Enable(false);
}
else
{
// Enable the edit menu
pCmdUI->Enable();
}
}