(1)ON_COMMAND消息:void CGlobalSFMMFCDlg::OnSift()
{
isChecked = !isChecked;
}
(2)ON_UPDATE_COMMAND_UI消息:void CGlobalSFMMFCDlg::OnUpdateSift(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(isChecked); 
}
(3)自己创建的OnInitMenuPopup:
void CGlobalSFMMFCDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
//CDialogEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
ASSERT(pPopupMenu != NULL);
CCmdUI state;
state.m_pMenu = pPopupMenu;
ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pParentMenu == NULL); HMENU hParentMenu;
if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
state.m_pParentMenu = pPopupMenu;
else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)
{
CWnd* pParent = this;
if (pParent != NULL && (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)
{
int nIndexMax = ::GetMenuItemCount(hParentMenu);
for (int nIndex = 0; nIndex < nIndexMax; nIndex++)
{
if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)
{
state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
break;
}
}
}
}
state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
state.m_nIndex++)
{
state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
if (state.m_nID == 0)
continue; ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pMenu != NULL);
if (state.m_nID == (UINT)-1)
{
state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
if (state.m_pSubMenu == NULL ||
(state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
state.m_nID == (UINT)-1)
{
continue;
}
state.DoUpdate(this, TRUE);
}
else
{
state.m_pSubMenu = NULL;
state.DoUpdate(this, FALSE);
} UINT nCount = pPopupMenu->GetMenuItemCount();
if (nCount < state.m_nIndexMax)
{
state.m_nIndex -= (state.m_nIndexMax - nCount);
while (state.m_nIndex < nCount &&
pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)
{
state.m_nIndex++;
}
}
state.m_nIndexMax = nCount;
}
}
可是就是不能在菜单项前面勾选???急求

解决方案 »

  1.   

    重载函数OnInitMenu,在函数中添加如下代码:
    pMenu->CheckMenuItem(ID_*****, MF_BYCOMMAND | (isChecked ? MF_CHECKED : MF_UNCHECKED));
    其中ID_****是菜单项的ID,isChecked是你自己定义的一个bool类型的变量。
    使用这种方法就不需要ON_UPDATE_COMMAND_UI消息函数,也不需要重载OnInitMenuPopup函数。
      

  2.   

    你那个方法应该也是可以的,你把//CDialogEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);这句话去掉注释试试。
      

  3.   

    对话框的菜单 直接用 CheckMenuItem