【发布时间】:2016-08-25 14:47:34
【问题描述】:
我需要重写 CMFCRibbonSlider 类的 wm_lbuttonup 事件
class CMyRibbonSlider : public CMFCRibbonSlider
{
public:
virtual void OnLButtonUp(CPoint point); // need this event handler!
};
void CMyRibbonSlider::OnLButtonUp(CPoint point)
{
AfxMessageBox(_T("Works!"))
return;
}
在 MainFrame 类中使用 CMyRibbonSlider 对象
class CMainFrame : public CMDIFrameWndEx
{
....
CMyRibbonSlider* SliderLine;
}
当 CMFCRibbonSlider 控件出现并且我单击鼠标左键时,没有任何反应。我做错了什么?
编辑:
初始化
CArray<CMFCRibbonBaseElement*, CMFCRibbonBaseElement*> ar;
m_wndRibbonBar.GetElementsByID(ID_SLIDER2, RibbonElementsArray);
m_wndRibbonBar.GetElementsByID(ID_START_BTN, ar);
RibbonElementsArray.Append(ar);
m_wndRibbonBar.GetElementsByID(ID_STOP_BTN, ar);
RibbonElementsArray.Append(ar);
m_wndRibbonBar.GetElementsByID(ID_SLIDER_LINE, ar); //HERE!
RibbonElementsArray.Append(ar);
m_wndRibbonBar.GetElementsByID(IDC_STATIC_TT, ar);
RibbonElementsArray.Append(ar);
Slider = DYNAMIC_DOWNCAST(CMFCRibbonSlider, RibbonElementsArray[0]);
btnStart = DYNAMIC_DOWNCAST(CMFCRibbonButton, RibbonElementsArray[1]);
btnStop = DYNAMIC_DOWNCAST(CMFCRibbonButton, RibbonElementsArray[2]);
SliderLine = (CMyRibbonSlider*)DYNAMIC_DOWNCAST(CMFCRibbonSlider, RibbonElementsArray[3]); //and HERE!
TmpLable = DYNAMIC_DOWNCAST(CMFCRibbonLabel, RibbonElementsArray[4]);
我在 Mainframe 类中也有这些事件处理程序,它们可以工作:
ON_UPDATE_COMMAND_UI(ID_SLIDER_LINE, &CMainFrame::OnUpdateSliderLine)
ON_COMMAND(ID_SLIDER_LINE, &CMainFrame::OnSliderLine)
SliderLine->GetPos() 也返回正确的滑块位置,所以我认为初始化是对的...
【问题讨论】:
-
CMyRibbonSlider* SliderLine;- 仅此而已?只有指针? -
代码需要更多上下文。由于您说出现了
CMyRibbonSlider控件,因此您不能只拥有指向它的指针。它还需要在某个时候构建。该代码很重要,您的 message map 也很重要。 -
当然它不仅仅是一个指针。我添加了一些代码。
标签: c++ mfc overriding eventhandler ribbon-control