2025-11-27 16:46:48 +09:00

195 lines
5.4 KiB
C++

// WorkspaceBar.cpp : implementation file
//
#include "stdafx.h"
#include "skinsdemo.h"
#include "WorkspaceBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWorkspaceBar
#define IDC_SHORTCUT_BAR 7565
CWorkspaceBar::CWorkspaceBar()
{
}
CWorkspaceBar::~CWorkspaceBar()
{
}
BEGIN_MESSAGE_MAP(CWorkspaceBar, COXSizeControlBar)
//{{AFX_MSG_MAP(CWorkspaceBar)
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
ON_NOTIFY(SHBN_SELECTITEM, IDC_SHORTCUT_BAR, OnShortcutBarSelectItem)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWorkspaceBar message handlers
int CWorkspaceBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COXSizeControlBar::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
SetClientBorder(TRUE);
// Create the shortcut bar
m_ShortcutBar.Create(this, CRect(0, 0, 0, 0), SHBS_EDITHEADERS | SHBS_EDITITEMS | SHBS_DISABLEDRAGDROPITEM |
SHBS_DISABLEDRAGDROPHEADER | SHBS_FLATGROUPBUTTON | SHBS_SHOWACTIVEALWAYS, IDC_SHORTCUT_BAR);
InitShortcutBar();
return 0;
}
void CWorkspaceBar::OnSize(UINT nType, int cx, int cy)
{
COXSizeControlBar::OnSize(nType, cx, cy);
// Size the tabs container accordingly
CRect rectClient;
GetClientRect(rectClient);
m_ShortcutBar.MoveWindow(rectClient);
}
void CWorkspaceBar::InitShortcutBar()
{
// Populate shortcut bar
m_ShortcutBar.SetImageList(&m_ilTree);
SHB_GROUPINFO shbGroup;
CString sText;
// create image lists
VERIFY(m_ilLarge.Create(IDB_LARGE,32,11,RGB(255, 0, 0)));
VERIFY(m_ilSmall.Create(IDB_SMALL,16,11,RGB(255, 0, 0)));
// Skins group
sText=_T("Skins");
shbGroup.nMask=SHBIF_TEXT;
shbGroup.nTextMax=sText.GetLength();
shbGroup.pszText=sText.GetBuffer(shbGroup.nTextMax);
sText.ReleaseBuffer();
m_ShortcutBar.InsertGroup(&shbGroup);
// outlook group
sText=_T("Outlook");
shbGroup.nMask=SHBIF_TEXT;
shbGroup.nTextMax=sText.GetLength();
shbGroup.pszText=sText.GetBuffer(shbGroup.nTextMax);
sText.ReleaseBuffer();
m_ShortcutBar.InsertGroup(&shbGroup);
// mail group
sText=_T("Mail");
shbGroup.nMask=SHBIF_TEXT;
shbGroup.nTextMax=sText.GetLength();
shbGroup.pszText=sText.GetBuffer(shbGroup.nTextMax);
sText.ReleaseBuffer();
m_ShortcutBar.InsertGroup(&shbGroup);
// find the skins group and populate it
sText=_T("Skins");
shbGroup.nMask=SHBIF_TEXT;
shbGroup.nTextMax=sText.GetLength();
shbGroup.pszText=sText.GetBuffer(shbGroup.nTextMax);
sText.ReleaseBuffer();
HSHBGROUP hGroup=m_ShortcutBar.FindGroup(&shbGroup);
ASSERT(hGroup);
m_ShortcutBar.SetLCImageList(hGroup,&m_ilLarge,LVSIL_NORMAL);
m_ShortcutBar.SetLCImageList(hGroup,&m_ilSmall,LVSIL_SMALL);
m_ShortcutBar.InsertLCItem(hGroup, 0, _T("Classic"), 0);
m_ShortcutBar.InsertLCItem(hGroup, 1, _T("Office XP"), 1);
m_ShortcutBar.InsertLCItem(hGroup, 2, _T("Office 2003"), 2);
m_ShortcutBar.ExpandGroup(hGroup);
m_ShortcutBar.GetGroupListCtrl(hGroup)->ActivateItem(2);
// fill standard list controls
TCHAR shbszItems[][20]={_T("Inbox"),_T("Calendar"),_T("Contracts"),
_T("Tasks"),_T("Journal"),_T("Notes"),_T("Deleted Items"),_T("Inbox"),
_T("Sent Items"),_T("Outbox"),_T("Deleted Items")};
// find outlook group and populate it
sText=_T("Outlook");
shbGroup.nMask=SHBIF_TEXT;
shbGroup.nTextMax=sText.GetLength();
shbGroup.pszText=sText.GetBuffer(shbGroup.nTextMax);
sText.ReleaseBuffer();
hGroup=m_ShortcutBar.FindGroup(&shbGroup);
ASSERT(hGroup);
m_ShortcutBar.SetLCImageList(hGroup,&m_ilLarge,LVSIL_NORMAL);
m_ShortcutBar.SetLCImageList(hGroup,&m_ilSmall,LVSIL_SMALL);
for(int i=0 ; i<10; i++)
for(int nIndex=0; nIndex<7 ; nIndex++)
{
CString sText=shbszItems[nIndex];
m_ShortcutBar.InsertLCItem(hGroup,nIndex+7*i,sText,nIndex);
}
// find mail group and populate it
sText=_T("Mail");
shbGroup.nMask=SHBIF_TEXT;
shbGroup.nTextMax=sText.GetLength();
shbGroup.pszText=sText.GetBuffer(shbGroup.nTextMax);
sText.ReleaseBuffer();
hGroup=m_ShortcutBar.FindGroup(&shbGroup);
ASSERT(hGroup);
m_ShortcutBar.SetLCImageList(hGroup,&m_ilLarge,LVSIL_NORMAL);
m_ShortcutBar.SetLCImageList(hGroup,&m_ilSmall,LVSIL_SMALL);
for(int nIndex=7; nIndex<(sizeof(shbszItems)/sizeof(shbszItems[0])); nIndex++)
{
CString sText=shbszItems[nIndex];
LV_ITEM lvi;
lvi.iItem=nIndex-7;
lvi.iSubItem=0;
lvi.mask=LVIF_TEXT|LVIF_IMAGE;
lvi.iImage=nIndex;
lvi.cchTextMax=sText.GetLength();
lvi.pszText=sText.GetBuffer(lvi.cchTextMax);
sText.ReleaseBuffer();
m_ShortcutBar.InsertLCItem(hGroup,&lvi);
}
DWORD dwBarStyle=m_ShortcutBar.GetBarStyle();
dwBarStyle&=~(SHBS_DISABLEDRAGDROPHEADER|SHBS_DISABLEDRAGDROPITEM);
dwBarStyle|=SHBS_DRAWITEMDRAGIMAGE|SHBS_DRAWHEADERDRAGIMAGE|SHBS_INFOTIP|
SHBS_AUTOEXPAND|SHBS_ANIMATEEXPAND;
m_ShortcutBar.SetBarStyle(dwBarStyle);
}
void CWorkspaceBar::OnShortcutBarSelectItem(NMHDR* pNotifyStruct, LRESULT* result)
{
LPNMSHORTCUTBAR pNMSHB = (LPNMSHORTCUTBAR) pNotifyStruct;
ASSERT(pNMSHB != NULL);
if (pNMSHB->nItem != -1)
{
// Change the skin
if (m_ShortcutBar.GetGroupText(pNMSHB->hGroup) == _T("Skins"))
{
CString strSkinName = m_ShortcutBar.GetGroupListCtrl(pNMSHB->hGroup)->GetItemText(pNMSHB->nItem, 0);
COXSkinnedApp* pSkinnedApp = DYNAMIC_DOWNCAST(COXSkinnedApp, AfxGetApp());
if (pSkinnedApp != NULL)
pSkinnedApp->SetCurrentSkin(strSkinName);
}
}
*result=0;
}