// OutlookView.cpp : implementation of the COutlookView class // #include "stdafx.h" #include "Outlook.h" #include "OutlookDoc.h" #include "OutlookView.h" #include "SHBPropertiesDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define IDC_START (100) #define IDC_OUTLOOKBAR (IDC_START + 1) #define IDC_TREE (IDC_START + 2) #define SHB_IDMPROPERTIES (SHB_IDMUSER + 1) ///////////////////////////////////////////////////////////////////////////// // COutlookView IMPLEMENT_DYNCREATE(COutlookView, CView) BEGIN_MESSAGE_MAP(COutlookView, CView) //{{AFX_MSG_MAP(COutlookView) ON_WM_CREATE() ON_WM_SIZE() //}}AFX_MSG_MAP ON_NOTIFY(SHBN_CONTEXTMENU, IDC_OUTLOOKBAR, OnSHBContextMenu) ON_COMMAND(SHB_IDMPROPERTIES, OnProperties) ON_COMMAND(ID_SKIN_CLASSIC, OnSkinClassic) ON_COMMAND(ID_SKIN_OFFICEXP, OnSkinOfficexp) ON_COMMAND(ID_SKIN_OFFICE2003, OnSkinOffice2003) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COutlookView construction/destruction COutlookView::COutlookView() { // TODO: add construction code here } COutlookView::~COutlookView() { } BOOL COutlookView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // COutlookView drawing void COutlookView::OnDraw(CDC* pDC) { UNREFERENCED_PARAMETER(pDC); COutlookDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // COutlookView diagnostics #ifdef _DEBUG void COutlookView::AssertValid() const { CView::AssertValid(); } void COutlookView::Dump(CDumpContext& dc) const { CView::Dump(dc); } COutlookDoc* COutlookView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COutlookDoc))); return (COutlookDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // COutlookView message handlers int COutlookView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; const COLORREF rgb = RGB(255, 0, 255); m_shb.Create(this, CRect(0,0,0,0), SHBS_EDITHEADERS | SHBS_EDITITEMS | SHBS_DRAWHEADERDRAGIMAGE | SHBS_BOLDEXPANDEDGROUP | SHBS_SHOWACTIVEALWAYS | SHBS_DRAWITEMDRAGIMAGE | SHBS_ANIMATEEXPAND | SHBS_FLATGROUPBUTTON, IDC_OUTLOOKBAR, WS_CHILD | WS_VISIBLE, NULL); // create tree control m_tree.Create(TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_EDITLABELS, CRect(0,0,0,0), &m_shb, IDC_TREE); TV_INSERTSTRUCT tvstruct; TCHAR rgszItems[][20] = { _T("Mail Box"), _T("Calendar"), _T("Deleted Items"), _T("Inbox"), _T("Journal"), _T("Notes"), _T("Outbox"), _T("Sent Items") }; VERIFY(m_ilTree.Create(IDB_BITMAP3, 16, 8, rgb)); m_tree.SetImageList(&m_ilTree, TVSIL_NORMAL); HTREEITEM hParent = NULL; int nIndex = 0; for (nIndex = 0; nIndex < (sizeof(rgszItems) / sizeof(rgszItems[0])); nIndex++) { tvstruct.hParent = nIndex == 0 ? NULL : hParent; tvstruct.hInsertAfter = TVI_LAST; tvstruct.item.iImage = nIndex; tvstruct.item.iSelectedImage = nIndex; tvstruct.item.pszText = rgszItems[nIndex]; tvstruct.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT; HTREEITEM hItem = m_tree.InsertItem(&tvstruct); hParent = hParent == NULL ? hItem : hParent; } { // VERIFY(m_ilTree2003.Create(25, 22, ILC_COLOR24 | ILC_MASK, 0, 10)); CBitmap bm; bm.LoadBitmap(IDB_BITMAP5); BITMAP b; bm.GetBitmap(&b); const int imageCount = 5; VERIFY(m_ilTree2003.Create(25, 22, ILC_COLOR32 | ILC_MASK, imageCount, imageCount) > 0); CDC dc; dc.CreateCompatibleDC(NULL); CDC srcDC; srcDC.CreateCompatibleDC(&dc); CBitmap * pOldSrcBmp = srcDC.SelectObject(&bm); for(int i=0;i<=imageCount; ++i) { CBitmap bitmap; bitmap.CreateBitmap(25, b.bmHeight, 1, 32, NULL); CBitmap * pOldDestBmp = dc.SelectObject(&bitmap); dc.BitBlt(0, 0, 25, b.bmHeight, &srcDC, 25 * i, 0, SRCCOPY); dc.SelectObject(pOldDestBmp); m_ilTree2003.Add(&bitmap, RGB(255, 0, 255)); } srcDC.SelectObject(pOldSrcBmp); } // populate shortcut bar m_shb.SetImageList(&m_ilTree2003); SHB_GROUPINFO shbGroup; CString sText; // create image lists VERIFY(m_ilLarge.Create(IDB_BITMAP1, 32, 11, rgb)); VERIFY(m_ilSmall.Create(IDB_BITMAP2, 16, 11, rgb)); // outlook group sText = _T("Outlook"); shbGroup.nMask = SHBIF_TEXT; shbGroup.nTextMax = sText.GetLength(); shbGroup.pszText = sText.GetBuffer(shbGroup.nTextMax); sText.ReleaseBuffer(); HSHBGROUP group = m_shb.InsertGroup(&shbGroup); m_shb.SetGroupImage(group, 0); // mail group sText = _T("Mail"); shbGroup.nMask = SHBIF_TEXT; shbGroup.nTextMax = sText.GetLength(); shbGroup.pszText = sText.GetBuffer(shbGroup.nTextMax); sText.ReleaseBuffer(); group = m_shb.InsertGroup(&shbGroup); m_shb.SetGroupImage(group, 1); // group with tree control child window sText = _T("Other"); shbGroup.nMask = SHBIF_TEXT | SHBIF_CHILDWND; shbGroup.nTextMax = sText.GetLength(); shbGroup.pszText = sText.GetBuffer(shbGroup.nTextMax); sText.ReleaseBuffer(); shbGroup.hwndChild = m_tree.GetSafeHwnd(); group = m_shb.InsertGroup(&shbGroup); m_shb.SetGroupImage(group, 2); HSHBGROUP hGroup = m_shb.FindGroup(&shbGroup); m_shb.SetGroupBkColor(hGroup, ::GetSysColor(COLOR_WINDOW)); // fill standard list controls TCHAR shbszItems[][20]= { _T("Inbox"), _T("Calendar"), _T("Contacts"), _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_shb.FindGroup(&shbGroup); ASSERT(hGroup); m_shb.SetLCImageList(hGroup, &m_ilLarge, LVSIL_NORMAL); m_shb.SetLCImageList(hGroup, &m_ilSmall, LVSIL_SMALL); for(nIndex = 0; nIndex < 7 ; nIndex++) { CString sText = shbszItems[nIndex]; LV_ITEM lvi; lvi.iItem = nIndex; 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_shb.InsertLCItem(hGroup, &lvi); } m_shb.ExpandGroup(hGroup); // 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_shb.FindGroup(&shbGroup); ASSERT(hGroup); m_shb.SetLCImageList(hGroup, &m_ilLarge, LVSIL_NORMAL); m_shb.SetLCImageList(hGroup, &m_ilSmall, LVSIL_SMALL); for (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_shb.InsertLCItem(hGroup, &lvi); } return 0; } void COutlookView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); CRect rect(0, 0, cx, cy); if (::IsWindow(m_shb.GetSafeHwnd())) m_shb.MoveWindow(&rect); } void COutlookView::OnSHBContextMenu(NMHDR* pNotifyStruct, LRESULT* pResult) { LPSHBCONTEXTMENU pSHBCM = (LPSHBCONTEXTMENU)((LPNMSHORTCUTBAR) pNotifyStruct)->lParam; if (pSHBCM->pShortcutBar->GetSafeHwnd() == m_shb.GetSafeHwnd() && m_shb.GetExpandedGroup() != NULL) { CMenu* pMenu = pSHBCM->pMenu; if (pMenu->GetMenuItemCount() > 0) pMenu->AppendMenu(MF_SEPARATOR); pMenu->AppendMenu(MF_STRING, SHB_IDMPROPERTIES, _T("Properties...")); } *pResult = 0; } void COutlookView::OnProperties() { CSHBPropertiesDlg propertiesDlg(&m_shb); propertiesDlg.DoModal(); } void COutlookView::OnSkinClassic() { m_shb.SetImageList(&m_ilTree); COXSkinnedApp* pSkinnedApp = DYNAMIC_DOWNCAST(COXSkinnedApp, AfxGetApp()); if (pSkinnedApp != NULL) pSkinnedApp->SetCurrentSkin(OXSkinClassic); } void COutlookView::OnSkinOfficexp() { m_shb.SetImageList(&m_ilTree); COXSkinnedApp* pSkinnedApp = DYNAMIC_DOWNCAST(COXSkinnedApp, AfxGetApp()); if (pSkinnedApp != NULL) pSkinnedApp->SetCurrentSkin(OXSkinOfficeXP); } void COutlookView::OnSkinOffice2003() { m_shb.SetImageList(&m_ilTree2003); COXSkinnedApp* pSkinnedApp = DYNAMIC_DOWNCAST(COXSkinnedApp, AfxGetApp()); if (pSkinnedApp != NULL) pSkinnedApp->SetCurrentSkin(OXSkinOffice2003); }