第一步:在菜单的关联函数中,判断是否选中及相关处理
void CDCMS3000MainView::OnMenuAutoRun()
{
// TODO: Add your command handler code here
if( AfxGetMainWnd()->GetMenu()->GetMenuState(ID_MENU_AUTORUN, MF_BYCOMMAND)
== MF_UNCHECKED )
{
SBF_OnRegItemAR( ((CDCMS3000MainApp*)AfxGetApp())->m_strLocalEXEPathName,
"PDT3000.DCMS3000Main");
((CDCMS3000MainApp*)(AfxGetApp()))->m_nRunMode = 1;
::WritePrivateProfileString("DCMS3000", "AUTORUN", "1",
((CDCMS3000MainApp*)AfxGetApp())->m_strLocalINIPathName);
AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_MENU_AUTORUN, MF_CHECKED);
}
else
{
SBF_OffRegItemAR();
((CDCMS3000MainApp*)(AfxGetApp()))->m_nRunMode = 0;
::WritePrivateProfileString("DCMS3000", "AUTORUN", "0",
((CDCMS3000MainApp*)AfxGetApp())->m_strLocalINIPathName);
AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_MENU_AUTORUN, MF_UNCHECKED);
}
}
注:SBF_ 开头的外部库文件主要用来实现,注册自动运行注册表项,此处做了简单封装
第二步:在菜单的 UPDATE_COMMAND_UI 消息中,添加实时选中处理
void CDCMS3000MainView::OnUpdateMenuAutoRun(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if( ((CDCMS3000MainApp*)(AfxGetApp()))->m_nRunMode == 1 )
{
pCmdUI->SetCheck(true);
}
else
{
pCmdUI->SetCheck(false);
}
}
注:m_nRunMode 可从配置文件或注册表项中获取程序运行模式,改变程序内存变量,从而影响菜单特征项
本文介绍了一个应用程序如何通过菜单选项来控制程序的自动运行状态。具体包括检查菜单项的状态、更新注册表项及配置文件,以及如何响应菜单点击事件并实时更新菜单图标。
8214

被折叠的 条评论
为什么被折叠?



