Как переименовать панель ленты MFC? - PullRequest
2 голосов
/ 25 февраля 2011

Я программирую многоязычное приложение, которое поддерживает динамическое переключение с одного языка на другой. Так как в классе CMFCRibbonPanel есть функция GetName, я думаю, что также должна быть функция SetName. Но, к сожалению, я не могу найти нужную функцию. Как динамически переименовать панель ленты? Большое спасибо.

Ответы [ 5 ]

3 голосов
/ 25 февраля 2011

имя панели защищено.

вы можете получить свой собственный класс из CMFCRibbon и добавить метод "SetName". Например,

class MyRibbonPanel : public CMFCRibbonPanel
{
public:
    MyRibbonPanel(LPCTSTR lpszName = NULL, HICON hIcon = NULL ) : CMFCRibbonPanel(lpszName, hIcon) {};
    void SetName(CString& name ) { m_strName = name; };
};

(после создания фиктивного приложения SDI вVS2010)

CMFCRibbonCategory* pCategory = m_wndRibbonBar.AddCategory(_T("&Legume"),
    IDR_PROPERTIES,
    IDB_PROPERTIES_HC );


MyRibbonPanel* pMyPanel = (MyRibbonPanel*)pCategory->AddPanel(_T("Patate"), m_PanelImages.ExtractIcon(1));
pMyPanel->SetKeys(_T("zc"));
pMyPanel->SetCenterColumnVert();
pMyPanel->SetJustifyColumns();

CString s(_T("sdcasdc"));
pMyPanel->SetName(s);
2 голосов
/ 07 августа 2014

Это также может быть полезно для других, если вы создали свои ленты с помощью пользовательского интерфейса VS ленты и не хотите создавать их вручную.

Работа над предыдущим ответом.

Поскольку панели не имеют идентификаторов, вы не можете выбрать их, чтобы создать указатель. Но если панели содержат элементы с идентификаторами, вы можете использовать их для создания указателя на панель, а затем переименовать, вместо того, чтобы создавать ее вручную.

Например, у меня на панели есть комбо, ID_TEST_COMBO

CMFCRibbonComboBox* m_RibbonTestCombo;
MyRibbonPanel*      m_ribbonPanel;
m_RibbonTestCombo= DYNAMIC_DOWNCAST(CMFCRibbonComboBox,m_wndRibbonBar.FindByID(ID_TEST_COMBO));
m_ribbonPanel = DYNAMIC_DOWNCAST(MyRibbonPanel, m_RibbonSSSRules->GetParentPanel());
CString s(_T("sdcasdc"));
m_ribbonPanel->SetName(s);

Это позволяет изменять текст без необходимости вручную создавать панель

0 голосов
/ 16 января 2019

Объединение https://stackoverflow.com/a/5120994/6648895 и https://stackoverflow.com/a/25180098/6648895 - это то, что наконец-то сработало для меня в VS 2013:

MyRibbonPanel* m_ribbonPanel;
m_ribbonPanel = static_cast<MyRibbonPanel*>(m_wndRibbonBar.GetCategory(1)->GetPanel(1));
CString s(_T("sdcasdc"));
m_ribbonPanel->SetName(s);
0 голосов
/ 25 февраля 2011

Возможно, вам придется удалить и повторно добавить его.Вот как работают некоторые другие функции ленты MFC.

0 голосов
/ 25 февраля 2011

Вы можете попробовать функцию SetWindowText. Также вы можете переопределить рисунок текста и добавить свой собственный текст.

Надеюсь, это поможет.

...