I’m working on a project using Visual C++ 6.0, and I need to be able to enable or disable certain menu items depending on the permissions assigned to the currently logged in user. This is the code I’m using:
// 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);
}
It does exactly what I want it to do, however I’m trying to find the best place to put it. If I put it in OnInitialUpdate(), I get the results I want, but only for the first invoice opened. If you open a second invoice without closing and re-opening the dialog, the code is not executed again. OnUpdate() isn’t called when opening a different invoice, and the only other place I’ve found that works is OnDraw(), the problem with OnDraw() is that the menu item doesn’t visually change state from Grayed out to Enabled or vice versa until you try to click it.
I ended up deciding to disable the
Edit Invoicemenu item, instead of theEditmenu itself. This proved much easier and cleaner, as it determines permission and enables or disables item every time the main'Editmenu is opened.