关于基于对话框应用程序使用菜单的Setcheck()函数出现的问题

zliang2000 2004-05-08 06:08:59
我写了个基于对话框应用程序,我把系统的菜单加入到对话框里面,但我的菜单需要用SetCheck()设置选中方式,但等我写好了以后发现这么一回事情:就是我用在我更新消息如下:
消息映射:ON_UPDATE_COMMAND_UI_RANGE( ID_1,ID_24, OnUpdateCheck )

处理函数:void CEFONTDlg::OnUpdateCheck(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck( m_ChooseCheckMenu == MenuIDToIndex(pCmdUI->m_nID) ;
}//其中MenuIDToIndex是我将菜单id更换为一个UINT型值然后和同为UINT
//的m_ChooseCheckMenu 比较

我老是选不中,然后我开始调试,发现原来基于对换框的时候我跟踪SetCheck时候发现程序调用了Mfc里面wincore.cpp的一个如下的函数
void CTestCmdUI::SetCheck( int )
{
// do nothing -- just want to know about calls to Enable
}
函数里面什么也不做,这个CTestCmdUI类一查发现他是从CCmdUI继承过来的,但基于视图方式我调试发现SetCheck里面有内容的,这是怎么回事情?请大虾把其中原理说个清楚好吗?我基于对换框的该如何解决这个问题?真是想不通,同是调用CCmdUI类其同一个setcheck()函数调试发现调的库里面setcheck()代码不一样这如何解决?
...全文
148 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zliang2000 2004-05-11
  • 打赏
  • 举报
回复
谢谢,结分
yingminghua 2004-05-10
  • 打赏
  • 举报
回复
谢谢gufengduyu(聪明的呆呆龙)
这个东东我也找了好久了,
十分感谢
gufengduyu 2004-05-08
  • 打赏
  • 举报
回复
让对话框响应WM_INITMENUPOPUP消息

响应函数:
void CMyDlg::OnInitMenuPopup(CMenu *pPopupMenu, UINT, BOOL)
{
UpdateMenu(pPopupMenu);
}

UpdateMenu函数的实现:
void CMyDlg::UpdateMenu(CMenu *pMenu)
{
CCmdUI cmdUI;
cmdUI.m_nIndexMax = pMenu->GetMenuItemCount();
for(UINT n = 0; n < cmdUI.m_nIndexMax; ++n)
{
CMenu* pSubMenu = pMenu->GetSubMenu(n);
if(pSubMenu == NULL)
{
cmdUI.m_nIndex = n;
cmdUI.m_nID = pMenu->GetMenuItemID(n);
cmdUI.m_pMenu = pMenu;
cmdUI.DoUpdate(this, FALSE);
}
else
{
UpdateMenu(pSubMenu);
}
}
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧