实时启用/禁用CMenu项的最佳方法 我正在使用VisualC++ 6进行项目,并且我需要能够启用或禁用某些菜单项,这取决于分配给当前登录用户的权限。这是我正在使用的代码: // 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); }
它做的正是我想要它做的,然而我正试图找到最好的地方来放置它。如果我将其放入实时启用/禁用CMenu项的最佳方法 我正在使用VisualC++ 6进行项目,并且我需要能够启用或禁用某些菜单项,这取决于分配给当前登录用户的权限。这是我正在使用的代码: // 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); },c++,visual-c++,mfc,C++,Visual C++,Mfc,它做的正是我想要它做的,然而我正试图找到最好的地方来放置它。如果我将其放入OnInitialUpdate(),我会得到我想要的结果,但只针对第一张打开的发票。如果在未关闭并重新打开对话框的情况下打开第二张发票,则不会再次执行代码OnUpdate()在打开其他发票时不会被调用,我发现唯一有效的地方是OnDraw(),即OnDraw()的问题是指在您尝试单击菜单项之前,菜单项的状态不会从灰色变为启用,反之亦然。我认为您必须将此代码包含在过程中 无效检查用户权限() 发生此事件时,您必须调用它: -
OnInitialUpdate()
,我会得到我想要的结果,但只针对第一张打开的发票。如果在未关闭并重新打开对话框的情况下打开第二张发票,则不会再次执行代码OnUpdate()
在打开其他发票时不会被调用,我发现唯一有效的地方是OnDraw()
,即OnDraw()的问题
是指在您尝试单击菜单项之前,菜单项的状态不会从灰色变为启用,反之亦然。我认为您必须将此代码包含在过程中
无效检查用户权限()
发生此事件时,您必须调用它:
- OnInitialUpdate()
- new user login (if your software permits user login/logout during the same session)
- new invoice opened
这有帮助吗?我最后决定禁用
编辑发票
菜单项,而不是编辑
菜单本身。事实证明,这更简单、更简洁,因为它决定了权限,并在每次打开主“编辑”
菜单时启用或禁用该项
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();
}
}
某种程度上。问题不在于它不是每次发票更改时都被调用,而是我无法让GUI自我更新以显示菜单的新状态,而用户不必首先尝试单击它。