我想使用两个功能区类别按钮在两个不同的视图之间切换,但我发现它无法为按钮添加事件处理程序。
有什么提示可以解决这个问题吗?如果有一些样本更好,实际上我是MFC的新手。
答案 0 :(得分:2)
您可以尝试挂钩此事件吗?
AFX_WM_ON_CHANGE_RIBBON_CATEGORY
答案 1 :(得分:0)
我发现成功的一个选项是继承CMFCRibbonBar并覆盖PreTranslateMessage并检查鼠标点击。以下是我迄今为止运作良好的步骤。
然后在我的覆盖中,我检查鼠标注册事件并检索活动类别
内部宣言
virtual BOOL PreTranslateMessage(MSG* pMsg);
int m_LastActiveCategory;
内部类定义
BOOL CCustomRibbonBar::PreTranslateMessage(MSG* pMsg)
{
//If command was finishing a click
if(pMsg->message == WM_LBUTTONUP && pMsg->wParam == 0)
{
//Allow ribbon to handle itself first
BOOL result = CMFCRibbonBar::PreTranslateMessage(pMsg);
//Get new active tab
int activeTab = GetCategoryIndex(GetActiveCategory());
//If tab has changed, forward message
if(activeTab != m_LastActiveCategory)
{
//forward message to parent
::SendMessage(GetParentFrame()->GetSafeHwnd(),WM_ACTIVE_RIBBON_TAB_CHANGED,activeTab,0);
m_LastActiveCategory = activeTab;
}
return result;
}
//Otherwise handle like normal
return CMFCRibbonBar::PreTranslateMessage(pMsg);
}