Как переименовать панель ленты MFC? У меня есть связанная проблема. Оригинальные подписи моей ленты в ресурсе написаны на языке A. Я перевожу все на язык B, включая имена панелей (используя метод, аналогичный предложенному в упомянутой теме). Но когда я сжимаю окно так, что некоторые (или все) панели разрушаются, их имена возвращаются к языку А. Когда я расширяю окно, имена панелей снова переводятся на язык В. Все еще не нашли решение. У кого-нибудь есть идея? : / EDIT: Мы используем класс переводчика, который работает с флагами, поэтому, в соответствии с языковым флагом, он переводит строки, которые затем применяются к категориям, кнопкам и т. Д. Я создал свой собственный класс панели, который наследуется от CMFCRibbonPanel. Я добавил этот метод:
void CRibbonPanel::setName(CString name)
{
m_strName = name;
}
Затем я создаю цикл для поиска и редактирования названия каждой панели:
(CRibbonPanel*)thePanel->setName(theNewName);
Это работает нормально, но когда панели свернуты, их заголовки возвращаются к языку по умолчанию.
Заголовок свернутой панели сохраняется в «кнопке панели по умолчанию». Расширьте класс доступа следующим образом:
class CRibbonPanel : public CMFCRibbonPanel
{
public:
void SetName(CString& name )
{ m_strName = name; };
CMFCRibbonDefaultPanelButton & GetDefBtn()
{ return m_btnDefault; }
};
Тогда используйте как это:
void ChangeText(CMFCRibbonPanel * pPanel, CString & newText)
{
auto pMyPanel = (CRibbonPanel *)(pPanel);
auto & defBtn = pMyPanel->GetDefBtn();
defBtn.SetText(newText);
}
Ленточный интерфейс MFC — не идеальная абстракция. К счастью, Microsoft распространяет исходный код для реализации ленты. На моей машине код панели находится в:
C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ atlmfc \ src \ mfc \ afxribbonpanel.cpp