我正在使用Visual C++ 6.0開發一個項目,並且需要根據分配給當前登錄用戶的權限啓用或禁用某些菜單項。這是我正在使用的代碼:實時啓用/禁用CMenu項目的最佳方法
// 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()
的問題在於菜單項在視覺上不會將狀態從「變灰」變爲「已啓用」,反之亦然,直到您嘗試點擊它。
整理。問題不在於每次更改發票時都沒有被調用,而是我無法讓GUI自行更新以顯示菜單的新狀態,而用戶不必先嚐試單擊它。 – NobodyNothing