ON_COMMAND_RANGE(ID_SORTING_GROUPBYTYPE, ID_SORTING_SORTBYACCESS, OnSort)
ON_UPDATE_COMMAND_UI_RANGE(ID_SORTING_GROUPBYTYPE, ID_SORTING_SORTBYACCESS, OnUpdateSort)
在上面的代碼中,其中第一個 ON_COMMAND_RANGE 的作用,是操作 指定ID范圍內的菜單在執行時的執行動作. 動作的內容就是 OnSort.也就是說,這里指定的一個范圍內的菜單一定是一個順序號的菜單,而且這些菜單具有相同的作用,比如按 某項排序,功能是相同的,只是排序依據不同而矣.
而第二個 ON_UPDATE_COMMAND_UI_RANGE 類似於 ON_UPDATE_COMMAND_UI的作用,只是這個宏是指定一定順序的操作函數.
當需要顯示時. ON_UPDATE_COMMAND_UI_RANGE 會逐個排查每一個顯示項,可以在這里指定顯示的選擇項等.如
void CClassView::OnUpdateSort(CCmdUI* pCmdUI) { pCmdUI->SetCheck(pCmdUI->m_nID == m_nCurrSort); }
上述代碼的意思就是根據 m_nCurrSort 來指定選擇項的 選擇.
CCmdUI* pCmdUI 這里是指定正在更新的菜單的項目
當需要操作執行時,可以使用 ON_COMMAND_RANGE 宏中指定的 OnSort 如:
void CClassView::OnSort(UINT id) { if (m_nCurrSort == id) { return; } m_nCurrSort = id; CClassViewMenuButton* pButton = DYNAMIC_DOWNCAST(CClassViewMenuButton, m_wndToolBar.GetButton(0)); if (pButton != NULL) { pButton->SetImage(GetCmdMgr()->GetCmdImage(m_nCurrSort)); m_wndToolBar.Invalidate(); m_wndToolBar.UpdateWindow(); } }
這里的id號,就是指的 真正點擊的 菜單的ID號.
