(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;
}
}
可是就是不能在選單項前面勾選???急求
uj5u.com熱心網友回復:
為什么沒人回復?uj5u.com熱心網友回復:
因為網上已經很多例子uj5u.com熱心網友回復:
多載函式OnInitMenu,在函式中添加如下代碼:pMenu->CheckMenuItem(ID_*****, MF_BYCOMMAND | (isChecked ? MF_CHECKED : MF_UNCHECKED));
其中ID_****是選單項的ID,isChecked是你自己定義的一個bool型別的變數。
使用這種方法就不需要ON_UPDATE_COMMAND_UI訊息函式,也不需要多載OnInitMenuPopup函式。
uj5u.com熱心網友回復:
你那個方法應該也是可以的,你把//CDialogEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);這句話去掉注釋試試。uj5u.com熱心網友回復:
對話框的選單 直接用 CheckMenuItem轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/105208.html
標籤:基礎類
