如何标记在 vc++ 6 中使用 mfc 检查的菜单项?
Posted
技术标签:
【中文标题】如何标记在 vc++ 6 中使用 mfc 检查的菜单项?【英文标题】:How to mark a menu item checked using mfc in vc++ 6? 【发布时间】:2017-09-21 13:50:30 【问题描述】:我创建了一个带有项目 U 的菜单样式,用于在代码下划线:
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);
没用。 告诉我任何可以帮助我的事情。
【问题讨论】:
请阅读有关 On_UPDATE-COMMAND_UI 处理程序的文档! 【参考方案1】:在资源编辑器中显示您的菜单并右键单击并选择添加事件处理程序:
接下来,您需要选择UPDATE_COMMAND_UI 消息并选择适当的类。然后点击添加和编辑:
然后,您只需根据需要更新菜单项。例如:
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);
所以现在您知道这两种方法了,具体取决于您的菜单上下文。
也就是说,在您的问题中,您没有提供太多有关菜单的上下文。是弹出菜单吗?它是大型机的一部分吗?你什么时候调用菜单?
希望以上内容(如对您问题的评论中所示)就足够了。
【讨论】:
以上是关于如何标记在 vc++ 6 中使用 mfc 检查的菜单项?的主要内容,如果未能解决你的问题,请参考以下文章