SPRING :: NOTE
[XTToolkitPro] RibbonBar 및 아이콘 만들기 본문
반응형
리본바를 만들어보겠다.
XTToolkit의 테마때문에 많은 삽질 끝에, 만들긴 하였는데. 이렇게 만드는게 잘한 방법인지는 모르겠다.
1. XTToolkit 프로젝트 생성 (이전 포스팅 참조)
OnCreate 부분에 아래 소스를 추가
// 자동생성
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// Initialize the command bars
if (!InitCommandBars())
return -1;
CXTPCommandBars* pCommandBars = GetCommandBars();
m_wndStatusBar.SetCommandBars(pCommandBars);
if (!CreateRibbonBar())
{
TRACE0("Failed to create ribbon\n");
return -1;
}
// Set Office 2003 Theme
GetCommandBars()->SetAllCaps(TRUE);
Load2013Icons();
SetCommandBarsTheme(xtpThemeOffice2013, theApp.m_hModule2013, _T("OFFICE2013WHITE.INI"));
CXTPRibbonBar *pRibbonBar = (CXTPRibbonBar*)GetCommandBars()->GetMenuBar();
pRibbonBar->GetSystemButton()->SetStyle(xtpButtonCaption);
m_paneManager.InstallDockingPanes(this);
m_paneManager.SetTheme(xtpPaneThemeVisualStudio2010);
m_paneManager.HideClient(TRUE);
// Create docking panes.
CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane(
IDR_PANE_OPTIONS, CRect(0, 0,50, 50), xtpPaneDockLeft);
CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane(
IDR_PANE_PROPERTIES, CRect(0, 0,50, 50), xtpPaneDockRight);
// Set the icons for the docking pane tabs.
int nIDIcons[] = { IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES};
m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons,
_countof(nIDIcons), RGB(0, 255, 0));
이 소스에서 오피스2013테마를 적용하는데, 샘플 예제에서는 FILE MENU 이벤트를 이용해
option theme를 바꿔주는 법을 몰라, 테마 변경 부 이벤트에서 막바로 소스를 가져왔다.
급하고 짜증났기때문에....
그 다음은 OnCreate안에 있는 리본바 생성 함수를 만들어준다.
BOOL CMainFrame::CreateRibbonBar()
{
CXTPCommandBars* pCommandBars = GetCommandBars();
CMenu menu;
menu.Attach(::GetMenu(m_hWnd));
SetMenu(NULL);
CXTPRibbonBar* pRibbonBar = (CXTPRibbonBar*)pCommandBars->Add(_T("The Ribbon"), xtpBarTop, RUNTIME_CLASS(CXTPRibbonBar));
if (!pRibbonBar)
{
return FALSE;
}
pRibbonBar->EnableDocking(0);
CXTPControlPopup* pControlFile = (CXTPControlPopup*)pRibbonBar->AddSystemButton(IDR_MAINFRAME);
pControlFile->SetCommandBar(menu.GetSubMenu(0));
pControlFile->SetCaption(_T("FILE"));
CreateBackstage();
CXTPRibbonTab* pTabHome = pRibbonBar->AddTab(IDS_TAB_HOME);
CXTPRibbonGroup* pGroupFile = pTabHome->AddGroup(ID_GROUP_FILE);
pGroupFile->Add(xtpControlButton, ID_FILE_NEW);
pGroupFile->Add(xtpControlButton, ID_FILE_OPEN);
pGroupFile->Add(xtpControlButton, ID_FILE_CLOSE);
pGroupFile->Add(xtpControlButton, ID_WINDOW_NEW);
pGroupFile->Add(xtpControlButton, ID_FILE_PRINT_PREVIEW);
pGroupFile->Add(xtpControlButton, ID_WINDOW_ARRANGE);
pGroupFile->Add(xtpControlButton, ID_WINDOW_TILE_HORZ);
pGroupFile->Add(xtpControlButton, ID_WINDOW_CASCADE);
}
백스테이지 함수도 추가
void CMainFrame::CreateBackstage()
{
CXTPRibbonBar* pRibbonBar = DYNAMIC_DOWNCAST(CXTPRibbonBar, GetCommandBars()->GetMenuBar());
ASSERT(pRibbonBar);
CXTPRibbonControlSystemButton* pButton = pRibbonBar->GetSystemButton();
CXTPRibbonBackstageView* pView = CXTPRibbonBackstageView::CreateBackstageView(GetCommandBars());
pView->AddCommand(ID_FILE_SAVE);
pView->AddCommand(ID_FILE_OPEN);
pView->AddCommand(ID_FILE_PRINT);
pView->AddCommand(ID_FILE_PRINT_PREVIEW);
pView->AddCommand(ID_FILE_PRINT_SETUP);
pView->AddCommand(ID_APP_EXIT);
pButton->SetCommandBar(pView);
pView->InternalRelease();
}
이렇게 하면 기본적인 RibbonBar가 작성된다.
아이콘도 입혀본다.
void CMainFrame::Load2013Icons()
{
CXTPCommandBars* pCommandBars = GetCommandBars();
CXTPCommandBarsOptions* pOptions = pCommandBars->GetCommandBarsOptions();
pCommandBars->GetImageManager()->RemoveAll();
UINT ui32[] = { ID_EDIT_PASTE, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, ID_FILE_NEW, 0, 0, 0, 0, 0, 0, 0, 0 // 1
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 2
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 3
, 0, 0, 0, 0, 0, ID_EDIT_FIND, 0, 0, 0, 0 // 4
, 0, 0, 0, 0, 0, 0, 0, 0, 0, ID_FILE_SAVE // 5
, 0, ID_FILE_OPEN, 0, 0, 0, 0, 0, 0, 0, 0 // 6
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 7
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 8
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 9
, 0, 0, 0, ID_FILE_CLOSE, 0, 0, 0, 0, ID_WINDOW_NEW, 0 // 10
, 0, 0, ID_FILE_PRINT_PREVIEW, 0, 0, 0, 0, ID_WINDOW_ARRANGE, ID_WINDOW_TILE_HORZ, ID_WINDOW_CASCADE // 11
, 0, ID_FILE_PRINT, 0, 0, 0, 0, 0, 0, 0, 0 // 12
, 0 }; // 13
pCommandBars->GetImageManager()->SetIcons(IDR_LARGEICONS, ui32, _countof(ui32), CSize(32, 32));
}
위 코드는 Toolkit에서 제공하는 기본 오피스2013 아이콘을 이용하여 만들었으며,
배열의 각 인자에 0이 아닌 나의 리소스를 넣어주면 그 리소스안에 아이콘이 적용된다.
이미지는 아래와 같으며, 통이미지를 배열에 인덱스값을 넣어주는것 같다. (MFC 초짜라 나 혼자만의 생각이다...)
반응형
'Development Tools > XtremeToolkit Pro' 카테고리의 다른 글
[XTToolkitPro] Report Control 사용하기 (0) | 2017.01.24 |
---|---|
[XTToolkitPro] DockingPane에 Child Dialog 추가하기 (0) | 2017.01.24 |
[XTToolkitPro] DockingPane 추가 (0) | 2016.09.19 |
[XTToolkitPro] DockingPane 프로젝트 생성 (0) | 2016.09.19 |
[XTToolkitPro] #error : Unknown VIsual Studio version (0) | 2016.09.19 |
Comments