Как я могу включить / отключить объект CMFCRibbonButton? - PullRequest
0 голосов
/ 25 апреля 2020

Как я могу включить / отключить объект CMFCRibbonButton?

Я вижу, что у него есть член IsDisabled(), но нет функции, подобной setEnable(BOOL en).

. Я видел, что в ribbonBar Word некоторые кнопки отключены , поэтому я думаю, что должен быть способ включить / отключить CMFCRibbonButton.

Пример кода:

CMFCRibbonBar ribbon;
pcat_home = ribbon.myAddCategory("&Home", IDR_RIBBONBAR_SMALL, IDR_RIBBONBAR);
CMFCRibbonPanel *ppanel = pcat_home->AddPanel("", 0, NULL);
CMFCRibbonButton *pb = new CMFCRibbonButton(PRINT_COMSETUP_MSG, "func1", hicon1, FALSE, NULL, FALSE, FALSE);
ppanel->Add(pb);
//...
// pb->setEnable(false);  // this not work , but I want to disable the button**

1 Ответ

0 голосов
/ 26 апреля 2020

Я нашел решение! Извлеките мой класс из CMFCRibbonButton и реализовали функцию setDisable , которая устанавливает защищенную переменную m_bIsDisabled Также необходимо переопределить copyFrom для копирования m_bIsDisabled при динамическом создании объекта.

class myRibbonButton : public  CMFCRibbonButton
{
   DECLARE_DYNCREATE(myRibbonButton)

   public:
    myRibbonButton(){}
    myRibbonButton(UINT nID, LPCTSTR lpszText, HICON hIcon, BOOL bAlwaysShowDescription = FALSE, HICON hIconSmall = NULL, BOOL bAutoDestroyIcon = FALSE, BOOL bAlphaBlendIcon = FALSE):
        CMFCRibbonButton( nID, lpszText,  hIcon,  bAlwaysShowDescription ,  hIconSmall ,  bAutoDestroyIcon ,  bAlphaBlendIcon ){}
    void setDisable(BOOL b) {  m_bIsDisabled =  b; }
    virtual void CopyFrom(const CMFCRibbonBaseElement& src) override
{
     CMFCRibbonButton::CopyFrom(src);
     m_bIsDisabled =src.IsDisabled();
}

};
...