2017-09-21 14 views
1

私はコードで下線のための項目Uでメニュースタイルを作成:vC++ 6でmfcを使ってチェックしたメニュー項目をマークするには?

void CPersonalEditorView::OnStylesU(){ 
    CHARFORMAT cf; 
    cf.cbSize = sizeof(cf); 
    cf.dwMask = CFM_UNDERLINE; 
    cf.dwEffects = CFE_UNDERLINE; 
    GetRichEditCtrl().SetSelectionCharFormat(cf);} 

私は「U」メニュー項目がクリックされたときにチェックマークを付けたいです。

CMenu *pMenu = GetMenu(); 
if (pMenu != NULL) 
{ 
    pMenu->CheckMenuItem(ID_STYLES_U, MF_CHECKED | MF_BYCOMMAND); 
} 

が を働いていない: 私が試してみました

CWnd* pParent = GetParent(); 
CMenu* pMenu = pParent->GetMenu(); 
pMenu->CheckMenuItem(ID_STYLES_U, MF_CHECKED); 

は働いていないと:

CMenu popupMenu; 
popupMenu.LoadMenu(IDR_PERSONTYPE); 
popupMenu.CheckMenuItem(ID_STYLES_U,MF_CHECKED); 

働いていません。 私を助けてくれるものを教えてください。

+2

On_UPDATE-COMMAND_UIハンドラのドキュメントをお読みください! – xMRi

答えて

1

は、イベントハンドラを追加をリソースエディタでメニューを表示し、右クリックして選択します。

Menu

次は、UPDATE_COMMAND_UIメッセージを選択し、適切なクラスを選択する必要があります。必要に応じて

Wizard

はその後、あなただけのメニュー項目を更新します。そして、追加および編集をクリックします。例:

void CMainFrame::OnUpdateOptionsLanguageItalian(CCmdUI* pCmdUI) 
{ 
    pCmdUI->SetCheck(theApp.GetProgramLanguage() == LANGUAGE_ITALIAN ? 1 : 0); 
} 

上記の例では、私はSetCheckを使用しています。あなたがクラスを見るなら、他にも選択肢があります。

メニューがCDialogの場合、上記のメカニズムはデフォルトでは存在しないため、使用できません。あなたは多くのフレームワークを追加することができますが、それは価値がありません。ダイアログオブジェクトの場合は、メソッドを作成し、必要に応じて手動で呼び出します。あなたの方法では、次のようにします:

CMenu *pMenu = GetMenu(); 

if (pMenu != nullptr) 
{ 
    pMenu->CheckMenuItem(ID_VIEW_ASSIGNMENT_HISTORY, 
     (m_pAssignHistoryDlg != nullptr) 
     ? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED); 
} 

これで、どちらの方法もメニューのコンテキストによって分かります。

あなたの質問では、あなたのメニューについて多くの文脈を提供していないと言われました。それはポップアップメニューですか?それはメインフレームの一部ですか?いつあなたはメニューを呼びますか?

あなたの質問へのコメントに示されているように、上記の内容で十分です。

関連する問題