2011-12-22 44 views
0

メニュー項目のチェックを設定する方法mfc C++これを試すが、常にチェックされていないメニュー項目。メニュー項目mfcのチェックを設定する方法C++

CString tcBuff; 
    CMenu popMenu; 
    popMenu.LoadMenu(nMenuID); 

    if (text.Compare(defaultconfig) == 0) 
    { 

     tcBuff.LoadStringW(IDC_DEFAULTREMOVE); 
     popMenu.ModifyMenuW(ID_CONFIGURATION_DEFAULT,0,ID_CONFIGURATION_DEFAULT,tcBuff); 
     popMenu.CheckMenuItem(IDC_DEFAULTREMOVE, MF_CHECKED || MF_BYCOMMAND); 
    } 

ありがとうございます。

+1

あなたは新しい 'CMenu'オブジェクトではなく、あなたのアプリケーションで使用される*実際の*メニューを変更しています。おそらく、[C++の良い本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を手に入れて、RAIIを理解していることを確認してください。 –

+0

回答ありがとう、私は私の問題を解決しました:) – nidhal

+0

通常、メニュー項目をチェックするには、そうしないでください。 ** ON_UPDATE_COMMAND_UI(IDC_DEFAULTREMOVE、function)**を使用して、メニュー項目をIDで処理する関数を使用する必要があります。 ** function **にはパラメータ** pCmdUI **があります。したがって、** if **ブロック内で** pCmdUI-> SetCheck(TRUE); **および** pCmdUI-> SetText(tcBuff); **を実行できます。 – sergiol

答えて

1

||演算子ではなく、|演算子が必要です。

あなたはにあなたはビットごとのOR演算を行うMF_CHECKEDMF_BYCOMMANDビットフラグを組み合わせたいです。それには|演算子が必要です。

はこのようにコードを変更し

popMenu.CheckMenuItem(IDC_DEFAULTREMOVE, MF_CHECKED | MF_BYCOMMAND); 


||演算子は、論理OR演算子です。 MF_UNCHECKEDと同等です

0x8 /* MF_CHECKED */ || 0x0 /* MF_BYCOMMAND */ == 0 

:それは実際にあなたにこれを提供します。

+0

ありがとう、私は私のコードを変更しましたが、同じ問題が続く。 – nidhal

+1

@nidhal:もう1つの可能性(そして最初に見たもの)は、スコープから外れると自動的に破壊される* new * 'CMenu'オブジェクトを作成して変更することです。アプリケーションの* actual *メニューを変更する必要があります。実際に何が起こっているのかを知るには、十分なコードが質問に掲載されていません。宣言されていない多くの変数が使用されています。 –

+0

私はOncontextmenuを新しい質問に投稿します – nidhal

0

文popMenu.CheckMenuItem(IDC_DEFAULTREMOVE、MF_CHECKED || MF_BYCOMMAND)でIDC_DEFAULTREMOVEの代わりにID_CONFIGURATION_DEFAULTを使用してください。

ID_CONFIGURATION_DEFAULT - コマンドID IDC_DEFAULTREMOVE - 文字列リソースID

関連する問題