Как переименовать панель ленты 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.