2011-12-04 20 views
4

私は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()の問題は、メニュー項目がGrayed outからEnabledに視覚的に変更されたり、それをクリックしてみてください。

答えて

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(); 
    } 
} 
0

I)は、(あなたが手順に

無効check_user_permissionをこのコードを含まなければならないと思います。このイベントが発生したとき、あなたはそれを呼び出す必要がありますよりも、

- OnInitialUpdate() 
- new user login (if your software permits user login/logout during the same session) 
- new invoice opened 

は、それは助けることはできますか?

+0

並べ替え問題は、請求書が変更されるたびに呼び出されるのではなく、ユーザーが最初にクリックしなくても、GUIの新しい状態を表示するようにGUIを更新することができないということではありませんでした。 – NobodyNothing

関連する問題