Как переименовать панель ленты MFC?

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

4 ответа

Название панели защищено.

Вы можете получить свой собственный класс из 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);

Это также может быть полезно для других, если вы создали свои ленты с помощью пользовательского интерфейса 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);

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

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

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

Объединение /questions/14176723/kak-pereimenovat-panel-lentyi-mfc/14176731#14176731 и /questions/14176723/kak-pereimenovat-panel-lentyi-mfc/14176728#14176728 - это то, что наконец-то сработало для меня в VS 2013:

MyRibbonPanel* m_ribbonPanel;
m_ribbonPanel = static_cast<MyRibbonPanel*>(m_wndRibbonBar.GetCategory(1)->GetPanel(1));
CString s(_T("sdcasdc"));
m_ribbonPanel->SetName(s);

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

Другие вопросы по тегам