2011-02-25 3 views
2

한 언어에서 다른 언어로 동적 전환을 지원하는 다중 언어 응용 프로그램을 프로그래밍하고 있습니다. CMFCRibbonPanel 클래스에는 GetName 함수가 있기 때문에 SetName 함수도 있어야한다고 생각합니다. 하지만 불행히도 원하는 기능을 찾을 수 없습니다. 리본 패널의 이름을 어떻게 동적으로 바꿉니 까? 고맙습니다.MFC 리본 패널의 이름을 바꾸려면 어떻게합니까?

답변

0

SetWindowText 기능을 사용해 볼 수 있습니다. 또한 텍스트의 그림을 무시하고 텍스트를 추가 할 수 있습니다.

희망이 도움이됩니다.

+0

안녕하세요, 리본 패널이 창 아니고, CMFCRibbonPanel은 CWnd에서 파생되지 않습니다. SetWindowText에서 호출 할 수 없습니다. – zhangjz

0

아마도 제거하고 다시 추가해야 할 것입니다. 이것이 다른 MFC 리본 기능의 작동 방식입니다.

3

패널 이름이 보호되어 있습니다.

CMFCRibbon에서 고유 한 클래스를 파생시키고 "SetName"메서드를 추가 할 수 있습니다.

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

예를 들어, 그것은 당신이 VS 리본 UI를 통해 리본을 만든 경우에도 다른 사람에게 도움이 될 수 있으며 싶지 않아

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); 
+0

오래 전 게시되었지만 그럼에도 불구하고 대단히 감사합니다. –

2

(VS2010에서 더미 SDI 응용 프로그램을 만든 후) 수동으로 생성해야합니다.

이전 답변에서 작업하십시오.

패널에는 ID가 없기 때문에 포인터를 만들 때 패널을 선택할 수 없습니다. 그러나 패널에 ID가있는 요소가 포함 된 경우이를 사용하여 패널에 대한 포인터를 만든 다음 수동으로 생성하지 않고 이름을 바꿀 수 있습니다. 예를 들어 내 패널의 콤보를

, 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); 

이 수동으로 패널을 만들 필요없이 텍스트를 변경할 수 있습니다

관련 문제