CMFCRibbonButton类能重绘吗?

解决方案 »

  1.   

    在哪看见过的啊?整个互联网都没有自绘RibbonButton的,因为它的基类根本就不是个窗口
      

  2.   

    在VS的安装目录下找到VC子目录.
    在该子目录里搜索afxribbonbutton.cpp
    参考该文件里的void CMFCRibbonButton::OnDraw(CDC* pDC)方法.
    该方法声明为virtual void OnDraw(CDC* pDC);
    所以自己写一个继承自CMFCRibbonButton类的自定义类.
    重写OnDraw方法就可以.这个方法太大了...但考虑的情况很全.楼主可视自身的情况取舍即可
    由于CMFCRibbonElement系列的类不是窗口类.只能通过Ribbon元素所放置的窗口类传递过来的DC绘制.
    放在CMFCRibbonBar上的元素由RibbonBar绘制,在CMFCRibbonStatusBar上的元素由StatusBar绘制.
    因为这些Bar系列类继承自CWnd,拥有自主的DC
      

  3.   

    消息也能截获吗?比如WM_LBUTTONUP之类的消息。
      

  4.   


    你要干什么? 响应单击事件?这个你create 按钮时给的id, 然后给id关联一个消息处理函数就可以了。 
      

  5.   

    没有create,ID有,怎么关联能再告诉我下不?下面是创建按钮的代码:  CMFCRibbonCategory *pRibbonUICategory =m_wndRibbonBar.AddCategory(_T("RibbonUI Category"),IDB_BITMAP1, IDB_BITMAP2);
     
      CMFCRibbonPanel *pTestPanel = pRibbonUICategory->AddPanel(_T("RibbonUI Panel"), m_PanelImages.ExtractIcon(1));

      // 在面板上添加Ribbon命令按钮(CMFCRibbonButton)
     
      pTestPanel->Add(new CMyRibbonButton(ID_BTN1, _T("11"), 0));
       pTestPanel->Add(new CMyRibbonButton(ID_BTN2, _T("22"), 1));
       pTestPanel->Add(new CMyRibbonButton(ID_BTN3, _T("33"), 2));
      

  6.   

    class CMyRibbonButton : public CMFCRibbonButton
    {
    public:
    CMyRibbonButton();
    virtual ~CMyRibbonButton();
    CMyRibbonButton(UINT nID, LPCTSTR lpszText, int nSmallImageIndex = -1, int nLargeImageIndex = -1, BOOL bAlwaysShowDescription = FALSE);
    void OnLButtonDown(CPoint point);
    void OnMouseMove(CPoint point);
    };
      

  7.   

    ON_MESSAGE(ID_BTN1 , 你的函数)
      

  8.   

    不是,要是能这样就好了,要是在资源里添加按钮,直接可以添加响应函数,如果是在代码里动态添加CMFCRibbonButton,添加完成后按钮都是不可用的
      

  9.   

    可以调整它的高度吗??????????????????????????????????????????????????????????????????????????????????riboonbar 上可以放各种控件!!!!!!!!!!!!!!!!!!!!!!做成对话框效果!!!!!!!!!!!!!!!!!!!!!!!!!资料好少。。
      

  10.   

    我的帖子,帮忙see see
      

  11.   


    就是这样的。 靠。 。vs2008 是手动添加这段代码, vs2010有ribbon编辑器, 直接就可以AddHandler添加消息映射。