// CalendarDemoView.cpp : implementation of the CCalendarDemoView class // // This file is a part of the XTREME TOOLKIT PRO MFC class library. // (c)1998-2008 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "CalendarDemo.h" #include "MainFrm.h" #include "CalendarDemoDoc.h" #include "CalendarDemoView.h" #include "DataProvidersOptions.h" #include "AdvancedCalendarOptionsDlg.h" #include "resource.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// extern CString GetDPName(int nDPType); extern int GetDPType(CXTPCalendarData* pData); ////////////////////////////////////////////////////////////////////////// static CXTPCalendarRemindersDialog* s_pDlgReminders = NULL; CString cstrMarkupDynamicSample( _T("") _T("") _T("Dynamically Customized Subject:/Calendar/Events/Event/Subject") _T("Dynamically Customized Body:") _T("") _T("/Calendar/Events/Event/Body") _T("") _T(" - Regards") _T("")); ///////////////////////////////////////////////////////////////////////////// // CCalendarDemoView IMPLEMENT_DYNCREATE(CCalendarDemoView, CXTPCalendarControlView) BEGIN_MESSAGE_MAP(CCalendarDemoView, CXTPCalendarControlView) //{{AFX_MSG_MAP(CCalendarDemoView) ON_WM_CREATE() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PAGE_SETUP, CXTPCalendarControlView::OnFilePageSetup) ON_COMMAND(ID_FILE_PRINT, CXTPCalendarControlView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CXTPCalendarControlView::OnFilePrintPreview) ON_COMMAND(ID_FILE_SAVE, OnFileSave) ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs) // User commands ON_COMMAND(ID_VIEW_REMINDERS, OnViewReminders) ON_UPDATE_COMMAND_UI(ID_VIEW_REMINDERS, OnUpdateViewReminders) ON_COMMAND(ID_CALENDAR_VIEW_DAY, OnCalendarViewDay) ON_COMMAND(ID_CALENDAR_VIEW_WORKWEEK, OnCalendarViewWorkWeek) ON_COMMAND(ID_CALENDAR_VIEW_WEEK, OnCalendarViewWeek) ON_COMMAND(ID_CALENDAR_VIEW_MONTH, OnCalendarViewMonth) ON_UPDATE_COMMAND_UI(ID_CALENDAR_VIEW_DAY, OnUpdateCalendarViewDay) ON_UPDATE_COMMAND_UI(ID_CALENDAR_VIEW_WORKWEEK, OnUpdateCalendarViewWorkWeek) ON_UPDATE_COMMAND_UI(ID_CALENDAR_VIEW_WEEK, OnUpdateCalendarViewWeek) ON_UPDATE_COMMAND_UI(ID_CALENDAR_VIEW_MONTH, OnUpdateCalendarViewMonth) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_60MINUTES, OnCalendarTimescale60) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_30MINUTES, OnCalendarTimescale30) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_15MINUTES, OnCalendarTimescale15) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_10MINUTES, OnCalendarTimescale10) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_6MINUTES, OnCalendarTimescale6) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_5MINUTES, OnCalendarTimescale5) ON_UPDATE_COMMAND_UI(ID_CALENDAR_CHANGETIMESCALE_60MINUTES, OnUpdateCalendarTimescale60) ON_UPDATE_COMMAND_UI(ID_CALENDAR_CHANGETIMESCALE_30MINUTES, OnUpdateCalendarTimescale30) ON_UPDATE_COMMAND_UI(ID_CALENDAR_CHANGETIMESCALE_15MINUTES, OnUpdateCalendarTimescale15) ON_UPDATE_COMMAND_UI(ID_CALENDAR_CHANGETIMESCALE_10MINUTES, OnUpdateCalendarTimescale10) ON_UPDATE_COMMAND_UI(ID_CALENDAR_CHANGETIMESCALE_6MINUTES, OnUpdateCalendarTimescale6) ON_UPDATE_COMMAND_UI(ID_CALENDAR_CHANGETIMESCALE_5MINUTES, OnUpdateCalendarTimescale5) ON_COMMAND(ID_CALENDAR_CHANGETIMESCALE_CHANGETIMEZONE, OnCalendarTimezone) ON_COMMAND(ID_CALENDAR_ADD_NEW_EVENT, OnAddNewEvent) // ON_COMMAND(ID_CALENDAR_LANGUAGE_RUSSIAN, OnCalendarLangRussian) // ON_COMMAND(ID_CALENDAR_LANGUAGE_DEFAULT, OnCalendarLangDefault) ON_BN_CLICKED(IDC_TIME_ZONE_BTN, OnCalendarTimezone) ON_BN_CLICKED(IDC_ADVANCED_OPT_BTN, OnAdvancedOptions) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCalendarDemoView construction/destruction CCalendarDemoView::CCalendarDemoView() { m_dsDayViewDays.SetDateTimeSpan(4,0,0,0); SetCalendarCtrl(&m_wndCalendarEx, FALSE); // Advise To Notifications CXTPNotifyConnection* ptrCalendarConn = GetCalendarCtrl().GetConnection(); ASSERT(ptrCalendarConn); if(!ptrCalendarConn) { return; } m_nScale = -1; m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDARCONTEXTMENU, &CCalendarDemoView::OnEvent_Calendar); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDARLBUTTONDBLCLICK, &CCalendarDemoView::OnEvent_Calendar); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDARKEYDOWN, &CCalendarDemoView::OnEvent_Calendar); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_IS_EVENT_EDIT_OPERATION_DISABLED, &CCalendarDemoView::OnEvent_IsEditActionDisabled); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_BEFORE_EVENT_EDIT_OPERATION, &CCalendarDemoView::OnEvent_BeforeEditAction); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_PREPOPULATE, &CCalendarDemoView::OnEvent_PrePopulate); //m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_SELECTION_CHANGED, &CCalendarDemoView::OnEvent_SelChanged); // Advise to Calendar Data Provider notifications m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAREVENTWASADDED, &CCalendarDemoView::OnEvent_CalendarData); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAREVENTWASDELETED, &CCalendarDemoView::OnEvent_CalendarData); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAREVENTWASCHANGED, &CCalendarDemoView::OnEvent_CalendarData); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDARPATTERNWASADDED, &CCalendarDemoView::OnEvent_CalendarData); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDARPATTERNWASDELETED, &CCalendarDemoView::OnEvent_CalendarData); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDARPATTERNWASCHANGED, &CCalendarDemoView::OnEvent_CalendarData); // m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_ON_REMINDERS, &CCalendarDemoView::OnReminders); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_BEFORE_DRAW_THEMEOBJECT, &CCalendarDemoView::OnBeforeDrawThemeObject); m_Sink.Advise(ptrCalendarConn, XTP_NC_CALENDAR_GETITEMTEXT, &CCalendarDemoView::OnEvent_GetItemText); } CCalendarDemoView::~CCalendarDemoView() { if (s_pDlgReminders) delete s_pDlgReminders; s_pDlgReminders = NULL; } BOOL CCalendarDemoView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style &= ~WS_BORDER; return CXTPCalendarControlView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CCalendarDemoView drawing void CCalendarDemoView::OnDraw(CDC* pDC) { UNREFERENCED_PARAMETER(pDC); CCalendarDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); } ///////////////////////////////////////////////////////////////////////////// // CCalendarDemoView diagnostics #ifdef _DEBUG void CCalendarDemoView::AssertValid() const { CXTPCalendarControlView::AssertValid(); } void CCalendarDemoView::Dump(CDumpContext& dc) const { CXTPCalendarControlView::Dump(dc); } CCalendarDemoDoc* CCalendarDemoView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCalendarDemoDoc))); return (CCalendarDemoDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CCalendarDemoView message handlers int CCalendarDemoView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTPCalendarControlView::OnCreate(lpCreateStruct) == -1) return -1; ((CWnd*)&GetCalendarCtrl())->EnableToolTips(TRUE); CCalendarDemoDoc* pDoc = GetDocument(); if (pDoc) { pDoc->m_pCalendar = &GetCalendarCtrl(); } m_CalendarController.SetCalendar(&GetCalendarCtrl()); m_wndScrollBar.Create(WS_CHILD | WS_VISIBLE | SBS_VERT, CRect(0, 0, 0, 0), this, 100); m_wndScrollBar.SetScrollBarStyle(xtpScrollStyleOffice2007Dark); SetScrollBarCtrl(&m_wndScrollBar); return 0; } ////////////////////////////////////////////////////////////////////////// // User message handlers // void CCalendarDemoView::SetView(XTPCalendarViewType viewType) { GetCalendarCtrl().SwitchActiveView(viewType); //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatLong(_T("dddd, d MMMM yyyy 'year'")); //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatMiddle(_T("ddd, d MMM yy")); //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatShort(_T("d MMMM")); //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatShortest(_T("d MMM")); ((CMainFrame*)GetParentFrame())->m_dlgOptions.OnViewChanged(viewType); } void CCalendarDemoView::OnCalendarViewDay() { if(GetCalendarCtrl().GetActiveView() && GetCalendarCtrl().GetActiveView()->GetViewType() != xtpCalendarDayView) { TRACE(_T("Switch to 1 day view.\n")); SetView(xtpCalendarDayView); OnUpdateTimeScale(); } } void CCalendarDemoView::OnCalendarViewWorkWeek() { if(GetCalendarCtrl().GetActiveView() && GetCalendarCtrl().GetActiveView()->GetViewType() != xtpCalendarWorkWeekView) { TRACE(_T("Switch to work week day view.\n")); SetView(xtpCalendarWorkWeekView); OnUpdateTimeScale(); } } void CCalendarDemoView::OnCalendarViewWeek() { if(GetCalendarCtrl().GetActiveView() && GetCalendarCtrl().GetActiveView()->GetViewType() != xtpCalendarWeekView) { TRACE(_T("Switch to week view.\n")); SetView(xtpCalendarWeekView); } } void CCalendarDemoView::OnCalendarViewMonth() { // CXTPCalendarControl::CUpdateContext cnt(&GetCalendarCtrl(), xtpCalendarUpdateLayout); if(GetCalendarCtrl().GetActiveView() && GetCalendarCtrl().GetActiveView()->GetViewType() != xtpCalendarMonthView) { TRACE(_T("Switch to month view.\n")); SetView(xtpCalendarMonthView); } // In month view Long, Middle and Short formats are always used for first month day header //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatLong(_T("d MMMM yyy")); //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatMiddle(_T("d MMM yy")); //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatShort(_T("d MMM")); // // In month view Shortest format is always used for not first month day header //GetCalendarCtrl().GetActiveView()->SetDayHeaderFormatShortest(_T("d")); } void CCalendarDemoView::OnUpdateCalendarViewDay(CCmdUI* pCmdUI) { BOOL bViewDay = FALSE; CXTPCalendarView* pView = GetCalendarCtrl().GetActiveView(); if (pView && pView->GetViewType() == xtpCalendarDayView) { bViewDay = TRUE; } pCmdUI->SetCheck(bViewDay); } void CCalendarDemoView::OnUpdateCalendarViewWorkWeek(CCmdUI* pCmdUI) { BOOL bViewDays = FALSE; CXTPCalendarView* pView = GetCalendarCtrl().GetActiveView(); if (pView && pView->GetViewType() == xtpCalendarWorkWeekView) { bViewDays = TRUE; } pCmdUI->SetCheck(bViewDays); } void CCalendarDemoView::OnUpdateCalendarViewWeek(CCmdUI* pCmdUI) { BOOL bViewWeek = FALSE; CXTPCalendarView* pView = GetCalendarCtrl().GetActiveView(); if (pView && pView->GetViewType() == xtpCalendarWeekView) bViewWeek = TRUE; pCmdUI->SetCheck(bViewWeek); } void CCalendarDemoView::OnUpdateCalendarViewMonth(CCmdUI* pCmdUI) { BOOL bViewMonth = FALSE; CXTPCalendarView* pView = GetCalendarCtrl().GetActiveView(); if (pView && pView->GetViewType() == xtpCalendarMonthView) bViewMonth = TRUE; pCmdUI->SetCheck(bViewMonth); } ////////////////////////////////////////////////////////////////////////// void CCalendarDemoView::SetCalendarToolTipMode(int nToolTipMode) { m_wndCalendarEx.m_nToolTipMode = nToolTipMode; GetCalendarCtrl().EnableToolTips(nToolTipMode == ctmStandard); } void CCalendarDemoView::SetCalendarTimeScale(int nScale) { m_nScale = nScale; OnUpdateTimeScale(); } void CCalendarDemoView::OnCalendarTimescale60() { SetCalendarTimeScale(60); } void CCalendarDemoView::OnCalendarTimescale30() { SetCalendarTimeScale(30); } void CCalendarDemoView::OnCalendarTimescale15() { SetCalendarTimeScale(15); } void CCalendarDemoView::OnCalendarTimescale10() { SetCalendarTimeScale(10); } void CCalendarDemoView::OnCalendarTimescale6() { SetCalendarTimeScale(6); } void CCalendarDemoView::OnCalendarTimescale5() { SetCalendarTimeScale(5); } void CCalendarDemoView::OnUpdateCalendarTimescale60(CCmdUI* pCmdUI) { OnUpdateCalendarTimescale(pCmdUI, 60); } void CCalendarDemoView::OnUpdateCalendarTimescale30(CCmdUI* pCmdUI) { OnUpdateCalendarTimescale(pCmdUI, 30); } void CCalendarDemoView::OnUpdateCalendarTimescale15(CCmdUI* pCmdUI) { OnUpdateCalendarTimescale(pCmdUI, 15); } void CCalendarDemoView::OnUpdateCalendarTimescale10(CCmdUI* pCmdUI) { OnUpdateCalendarTimescale(pCmdUI, 10); } void CCalendarDemoView::OnUpdateCalendarTimescale6(CCmdUI* pCmdUI) { OnUpdateCalendarTimescale(pCmdUI, 6); } void CCalendarDemoView::OnUpdateCalendarTimescale5(CCmdUI* pCmdUI) { OnUpdateCalendarTimescale(pCmdUI, 5); } void CCalendarDemoView::OnUpdateCalendarTimescale(CCmdUI* pCmdUI, int nScale) { BOOL bEnable = FALSE; BOOL bChecked = FALSE; CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetActiveView()); if (pDayView) { bEnable = TRUE; if (pDayView->GetScaleInterval().GetTotalMinutes() == nScale) bChecked = TRUE; } pCmdUI->Enable(bEnable); pCmdUI->SetCheck(bChecked); } void CCalendarDemoView::OnUpdateViewReminders(CCmdUI* pCmdUI) { pCmdUI->Enable(GetCalendarCtrl().IsRemindersEnabled()); } CString GetModulePath() { TCHAR szCurPath[_MAX_PATH + 2]; ::GetModuleFileName(AfxGetInstanceHandle(), szCurPath, _MAX_PATH); CString strCurPath(szCurPath); strCurPath = strCurPath.Left(strCurPath.ReverseFind('\\')+1); return strCurPath; } //void CCalendarDemoView::OnCalendarLangDefault() //{ // XTPResourceManager()->SetResourceFile(_T("")); // // GetCalendarCtrl().Populate(); // // m_wndDatePicker.AdjustLayout(); // m_wndDatePicker.RedrawControl(); //} //void CCalendarDemoView::OnCalendarLangRussian() //{ // CString strRCpath = GetModulePath(); // // strRCpath += _T("Translations\\ToolkitPro.ResourceRu.dll"); // // XTPResourceManager()->SetResourceFile(strRCpath); // // GetCalendarCtrl().Populate(); // // m_wndDatePicker.AdjustLayout(); // m_wndDatePicker.RedrawControl(); // //} ////////////////////////////////////////////////////////////////////////// // void CCalendarDemoView::OnAddNewEvent() { AddNewEvent(); } void CCalendarDemoView::AddNewEvent(CPoint* /*pPtHitContext*/) { CXTPCalendarEventPropertiesDlg dlg(&GetCalendarCtrl(), TRUE, this); dlg.DoModal(); } void CCalendarDemoView::OnCalendarTimezone() { TRACE(_T("Time zone dialog.\n")); CXTPCalendarOptions* pOptions = GetCalendarCtrl().GetCalendarOptions(); ASSERT(pOptions); if (pOptions) { CXTPCalendarTimeScalePropertiesDlg dlg; // init parameters dlg.m_strCaption1 = pOptions->strDayView_ScaleLabel; dlg.m_strCaption2 = pOptions->strDayView_Scale2Label; dlg.m_bShowScale2 = pOptions->bDayView_Scale2Visible; dlg.m_tziScale2 = pOptions->tziDayView_Scale2TimeZone; // execute and save if (dlg.DoModal() == IDOK) { // first time scale pOptions->strDayView_ScaleLabel = dlg.m_strCaption1; // second time scale pOptions->bDayView_Scale2Visible = dlg.m_bShowScale2; if (dlg.m_bShowScale2) { pOptions->strDayView_Scale2Label = dlg.m_strCaption2; pOptions->tziDayView_Scale2TimeZone = dlg.m_tziScale2; } pOptions->OnOptionsChanged(); // redraw GetCalendarCtrl().Populate(); } } } void CCalendarDemoView::OnAdvancedOptions() { CAdvancedCalendarOptionsDlg dlgOptEx(&GetCalendarCtrl(), this); dlgOptEx.DoModal(); } void CCalendarDemoView::OnInitialUpdate() { CXTPCalendarControlView::OnInitialUpdate(); // date picker CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd(); //m_CalendarController.SetBoldDaysPerIdleStep(1); //m_CalendarController.SetBoldDaysIdleStepTime_ms(999); m_CalendarController.SetDatePicker(&pWnd->m_dlgDatePicker.m_wndDatePicker); //--------------------------------------------------------------------------- m_dtDayViewStart = COleDateTime::GetCurrentTime(); //--------------------------------------------------------------------------- ((CMainFrame*)GetParentFrame())->m_dlgOptions.Init(); m_nScale = GetCalendarCtrl().GetCalendarOptions()->nDayView_ScaleInterval; // initial settings OnCalendarViewWorkWeek(); CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetDayView() ); if(pDayView) { pDayView->ScrollToWorkDayBegin(); } //--------------------------------------------------------------------------- OnOfficeThemeChanged(xtpCalendarThemeOffice2007); CreateRemindersWindow(); ShowCaptionBar(TRUE); } void CCalendarDemoView::OnUpdateTimeScale() { CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetActiveView()); if (pDayView) { pDayView->SetScaleInterval(COleDateTimeSpan(0, m_nScale/60, m_nScale%60, 0)); } else { GetCalendarCtrl().GetCalendarOptions()->nDayView_ScaleInterval = m_nScale; GetCalendarCtrl().GetCalendarOptions()->OnOptionsChanged(); } } void CCalendarDemoView::OnEvent_Calendar(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); if (!GetCalendarCtrl().GetActiveView()) return; CPoint ptHit(wParam); XTP_CALENDAR_HITTESTINFO hitInfo; BOOL bHitTest = GetCalendarCtrl().GetActiveView()->HitTest(ptHit, &hitInfo); if (XTP_NC_CALENDARKEYDOWN == Event) { if (wParam == VK_RETURN && !GetCalendarCtrl().GetActiveView()->IsEditingSubject() && GetCalendarCtrl().GetActiveView()->GetDraggingMode() == xtpCalendaDragModeUnknown) { CXTPCalendarViewEvents* selectedEvents = GetCalendarCtrl().GetActiveView()->GetSelectedViewEvents(); if (selectedEvents && selectedEvents->GetCount() > 0) { CXTPCalendarEventPtr ptrEvent = selectedEvents->GetAt(0)->GetEvent()->CloneEvent(); CXTPCalendarEventPropertiesDlg dlg(&GetCalendarCtrl(), FALSE, this, ptrEvent); dlg.DoModal(); } else { AddNewEvent(); } } } else if (XTP_NC_CALENDARCONTEXTMENU == Event) { if (bHitTest) { CPoint ptMenu = ptHit; GetCalendarCtrl().ClientToScreen(&ptMenu); if (hitInfo.pViewEvent) { CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU_CONTEXT_EVENT)); // track menu int nMenuResult = CXTPCommandBars::TrackPopupMenu(menu.GetSubMenu(0), TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTALIGN |TPM_RIGHTBUTTON, ptMenu.x, ptMenu.y, this, NULL); // general items processing switch (nMenuResult) { case ID_POPUP_DELETEEVENT: { VERIFY( GetCalendarCtrl().DoDeleteSelectedEvents(hitInfo.pViewEvent) ); GetCalendarCtrl().Populate(); } break; case ID_POPUP_PROPERTIES: { ASSERT(hitInfo.pViewEvent); if(hitInfo.pViewEvent) { CXTPCalendarEvent* pEvent = hitInfo.pViewEvent->GetEvent(); CXTPCalendarEventPtr ptrEvent = pEvent->CloneEvent(); CXTPCalendarControl::CUpdateContext updateContext(&GetCalendarCtrl(), xtpCalendarUpdateLayout|xtpCalendarUpdateRedraw); CXTPCalendarEventPropertiesDlg dlg(&GetCalendarCtrl(), FALSE, this, ptrEvent); dlg.DoModal(); } } break; } } else if (GetCalendarCtrl().GetActiveView()->IsKindOf( RUNTIME_CLASS(CXTPCalendarDayView) )) { CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU_CONTEXT_DAY)); CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetActiveView()); if (pDayView) { int nInterval = (int)pDayView->GetScaleInterval().GetTotalMinutes(); int nMenuItem = nInterval >= 60 ? ID_CALENDAR_CHANGETIMESCALE_60MINUTES : (nInterval >= 30 ? ID_CALENDAR_CHANGETIMESCALE_30MINUTES : (nInterval >= 15 ? ID_CALENDAR_CHANGETIMESCALE_15MINUTES : (nInterval >= 10 ? ID_CALENDAR_CHANGETIMESCALE_10MINUTES : (nInterval >= 6 ? ID_CALENDAR_CHANGETIMESCALE_6MINUTES : (nInterval >= 5 ? ID_CALENDAR_CHANGETIMESCALE_5MINUTES : 0))))); menu.CheckMenuItem(nMenuItem, MF_CHECKED); } // track menu int nMenuResult = CXTPCommandBars::TrackPopupMenu(menu.GetSubMenu(0), TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTALIGN |TPM_RIGHTBUTTON, ptMenu.x, ptMenu.y, this, NULL); // general items processing switch (nMenuResult) { case ID_CALENDAR_CHANGETIMESCALE_60MINUTES: OnCalendarTimescale60(); break; case ID_CALENDAR_CHANGETIMESCALE_30MINUTES: OnCalendarTimescale30(); break; case ID_CALENDAR_CHANGETIMESCALE_15MINUTES: OnCalendarTimescale15(); break; case ID_CALENDAR_CHANGETIMESCALE_10MINUTES: OnCalendarTimescale10(); break; case ID_CALENDAR_CHANGETIMESCALE_6MINUTES: OnCalendarTimescale6(); break; case ID_CALENDAR_CHANGETIMESCALE_5MINUTES: OnCalendarTimescale5(); break; case ID_CALENDAR_CHANGETIMESCALE_CHANGETIMEZONE: OnCalendarTimezone(); break; case ID_CALENDAR_ADD_NEW_EVENT: AddNewEvent(&ptHit); break; default: ASSERT(nMenuResult == 0); } } else //if (GetCalendarCtrl().GetActiveView()->IsKindOf( RUNTIME_CLASS(CXTPCalendarWeekView) )) { CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU_CONTEXT_WEEK)); // track menu int nMenuResult = CXTPCommandBars::TrackPopupMenu(menu.GetSubMenu(0), TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTALIGN |TPM_RIGHTBUTTON, ptMenu.x, ptMenu.y, this, NULL); // general items processing switch (nMenuResult) { case ID_POPUP_GOTOTHISDAY: { GetCalendarCtrl().SwitchActiveView(xtpCalendarDayView); CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetActiveView()); if (pDayView) { COleDateTime dtThisDay(hitInfo.dt); pDayView->ResetSelection(); pDayView->ShowDay(dtThisDay); } } break; case ID_CALENDAR_ADD_NEW_EVENT: AddNewEvent(&ptHit); break; } } } } else if (XTP_NC_CALENDARLBUTTONDBLCLICK == Event) { if (bHitTest && hitInfo.pViewEvent) { // mouse double clicked - show event edit dialog CXTPCalendarEvent* pEvent = hitInfo.pViewEvent->GetEvent(); CXTPCalendarEventPtr ptrEvent = pEvent->CloneEvent(); if(hitInfo.pViewEvent->IsShowingToolTip()) { hitInfo.pViewEvent->HideToolTip(); } CXTPCalendarEventPropertiesDlg dlg(&GetCalendarCtrl(), FALSE, this, ptrEvent); dlg.DoModal(); } else if (bHitTest && (hitInfo.uHitCode & (xtpCalendarHitTestDayArea|xtpCalendarHitTestDayHeader))) { AddNewEvent(&ptHit); } } } void CCalendarDemoView::OnFileSave() { CXTPCalendarData* pData = GetCalendarCtrl().GetDataProvider(); if(!pData) { ASSERT(FALSE); return; } if(GetDPType(pData) == xtpCalendarDataProviderMemory) { CString strFileName = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_Mem_File_opt); if(!pData->Save()) { CString strDPname = GetDPName(xtpCalendarDataProviderMemory); CString strMsg; strMsg.Format(_T("%s cannot create file: \n%s"), strDPname, strFileName); AfxMessageBox(strMsg); } } } void CCalendarDemoView::OnFileSaveAs() { CXTPCalendarData* pData = GetCalendarCtrl().GetDataProvider(); if(!pData) { ASSERT(FALSE); return; } if(GetDPType(pData) != xtpCalendarDataProviderMemory) { ASSERT(FALSE); return; } CDataProvidersOptions optDlg; optDlg.m_strTitle = _T("Save calendar data as:"); optDlg.m_bOpenMode = FALSE; optDlg.m_bWarnIfExist = TRUE; optDlg.m_eMode = CDataProvidersOptions::modeMemOnly; int nDlgRes = (int)optDlg.DoModal(); if(nDlgRes != IDOK) { return; } CString strFileName = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_Mem_File_opt); if(!pData->Save()) { CString strDPname = GetDPName(xtpCalendarDataProviderMemory); CString strMsg; strMsg.Format(_T("%s cannot create file: \n%s"), strDPname, strFileName); AfxMessageBox(strMsg); } } void CCalendarDemoView::OnUpdateFileSave(CCmdUI* pCmdUI) { CXTPCalendarData* pData = GetCalendarCtrl().GetDataProvider(); int nDPType = GetDPType(pData); pCmdUI->Enable(nDPType == xtpCalendarDataProviderMemory); } void CCalendarDemoView::OnUpdateFileSaveAs(CCmdUI* pCmdUI) { OnUpdateFileSave(pCmdUI); } void CCalendarDemoView::OnEvent_IsEditActionDisabled(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam) { if (XTP_NC_CALENDAR_IS_EVENT_EDIT_OPERATION_DISABLED != Event) { ASSERT(FALSE); return; } XTP_EVENT_EDIT_OPERATION_PARAMS* pOPparams = (XTP_EVENT_EDIT_OPERATION_PARAMS*)wParam; BOOL* pbCancel = (BOOL*)lParam; ASSERT(pbCancel); // check is already canceled/handled if(!pOPparams || !pbCancel || *pbCancel) { return; } // Disable dragging for recurrence events // // CXTPCalendarEvent* pEvent = pOPparams->pEventViews->GetAt(0)->GetEvent(); // ASSERT(pEvent); // if((pOPparams->eOperation == xtpCalendarEO_DragCopy || pOPparams->eOperation == xtpCalendarEO_DragMove || // pOPparams->eOperation == xtpCalendarEO_DragResizeBegin || pOPparams->eOperation == xtpCalendarEO_DragResizeEnd) // && pEvent // && pEvent->GetRecurrenceState() != xtpCalendarRecurrenceNotRecurring) // { // *pbCancel = TRUE; // } } void CCalendarDemoView::OnEvent_BeforeEditAction(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam) { if (XTP_NC_CALENDAR_BEFORE_EVENT_EDIT_OPERATION != Event) { ASSERT(FALSE); return; } XTP_EVENT_EDIT_OPERATION_PARAMS* pOPparams = (XTP_EVENT_EDIT_OPERATION_PARAMS*)wParam; BOOL* pbHandled = (BOOL*)lParam; ASSERT(pbHandled && pOPparams); // check is already canceled/handled if(!pOPparams || !pbHandled || *pbHandled) { return; } if(pOPparams->eOperation == xtpCalendarEO_DeleteEvent) { if(!pOPparams->pEventViews || !pOPparams->pEventViews->GetAt(0)) { ASSERT(FALSE); return; } CXTPCalendarEvent* pEvent = pOPparams->pEventViews->GetAt(0)->GetEvent(); if(!pEvent) { ASSERT(FALSE); return; } if(pEvent->GetRecurrenceState() == xtpCalendarRecurrenceNotRecurring) { CString strMsg; strMsg.Format(_T("Would you like to delete event: \"%s\" ?"), pEvent->GetSubject()); int nRes = AfxMessageBox(strMsg, MB_YESNO); if(nRes == IDNO) { *pbHandled = TRUE; } } } //** since ver 9.81 //****************** //if (pOPparams->eOperation == xtpCalendarEO_DragMove || // pOPparams->eOperation == xtpCalendarEO_DragCopy ) //{ // XTP_EVENT_DRAG_OPERATION_PARAMS* pOpDrag = (XTP_EVENT_DRAG_OPERATION_PARAMS*)pOPparams; // ASSERT(pOpDrag->pDraggingEvent && pOpDrag->pDraggingEventNew); // // if(pOpDrag->pDraggingEvent && pOpDrag->pDraggingEventNew) // { // COleDateTime dtOrigStart = pOpDrag->pDraggingEvent->GetStartTime(); // COleDateTime dtNewStart = pOpDrag->pDraggingEventNew->GetStartTime();; // // if (CXTPCalendarUtils::ResetTime(dtOrigStart) != CXTPCalendarUtils::ResetTime(dtNewStart) // || pOpDrag->pDraggingEvent->IsAllDayEvent() != pOpDrag->pDraggingEventNew->IsAllDayEvent()) // { // *pbHandled = TRUE; // } // } //} //** for ver 9.80 //****************** //if(pOPparams->eOperation == xtpCalendarEO_DragMove && // GetCalendarCtrl().GetActiveView()->GetDraggingEventOrig()) //{ // CPoint pt; // GetCursorPos(&pt); // GetCalendarCtrl().ScreenToClient(&pt); // XTP_CALENDAR_HITTESTINFO hitInfo; // if(GetCalendarCtrl().GetActiveView()->HitTest(pt, &hitInfo)) // { // COleDateTime dtOrigStart = GetCalendarCtrl().GetActiveView()->GetDraggingEventOrig()->GetStartTime(); // // // store previous version to rollback // CXTPCalendarEventPtr ptrEventPrev = GetCalendarCtrl().GetActiveView()->GetDraggingEventNew()->CloneEvent(); // // if(GetCalendarCtrl().GetActiveView()->OnDragging(pt, &hitInfo)) // { // CXTPCalendarEvent* pEventNew = GetCalendarCtrl().GetActiveView()->GetDraggingEventNew(); // COleDateTime dtNewStart = pEventNew->GetStartTime(); // // if(CXTPCalendarUtils::ResetTime(dtOrigStart) != // CXTPCalendarUtils::ResetTime(dtNewStart) ) // { // *pbHandled = TRUE; // } // // pEventNew->Update(ptrEventPrev); // // //TRACE(_T("orig: %s - point: %s = [%d] \n"), dtOrigStart.Format(), hitInfo.dt.Format(), // // *pbHandled); // } // } //} } void CCalendarDemoView::OnEvent_CalendarData(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(wParam); CString strActionText; switch(Event) { case XTP_NC_CALENDAREVENTWASADDED: strActionText = _T("Event_WasAdded"); break; case XTP_NC_CALENDAREVENTWASDELETED: strActionText = _T("Event_WasDeleted"); break; case XTP_NC_CALENDAREVENTWASCHANGED: strActionText = _T("Event_WasChanged"); break; case XTP_NC_CALENDARPATTERNWASADDED: strActionText = _T("Pattern_WasAdded"); break; case XTP_NC_CALENDARPATTERNWASDELETED: strActionText = _T("Pattern_WasDeleted"); break; case XTP_NC_CALENDARPATTERNWASCHANGED: strActionText = _T("Pattern_WasChanged"); break; default: ASSERT(FALSE); return; } //=========================================================================== CXTPCalendarData* pData = GetCalendarCtrl().GetDataProvider(); if(!pData) { ASSERT(FALSE); return; } if(Event == XTP_NC_CALENDAREVENTWASADDED || Event == XTP_NC_CALENDAREVENTWASDELETED || Event == XTP_NC_CALENDAREVENTWASCHANGED) { //EVENT: CXTPCalendarEvent* pEvent = (CXTPCalendarEvent*)lParam; if(pEvent) { COleDateTime dtStart = pEvent->GetStartTime(); COleDateTime dtEnd = pEvent->GetEndTime(); CString strSubject = pEvent->GetSubject(); TRACE(_T("%s (ID=%d): %s-%s, '%s' \n"), strActionText, pEvent->GetEventID(), dtStart.Format(), dtEnd.Format(), strSubject); } else { TRACE(_T("%s (pEvent=%x) \n"), strActionText, wParam); } } else { //PATTERN: CXTPCalendarRecurrencePatternPtr ptrPattern = pData->GetRecurrencePattern((DWORD)wParam); if(ptrPattern) { COleDateTime dtStartPatt = ptrPattern->GetPatternStartDate(); CXTPCalendarEventPtr ptrMasterEvent = ptrPattern->GetMasterEvent(); ASSERT(ptrMasterEvent); CString strSubject = ptrMasterEvent ? ptrMasterEvent->GetSubject() : _T(""); TRACE(_T("%s (ID=%d): pattern starts at %s, '%s' \n"), strActionText, wParam, dtStartPatt.Format(), strSubject); } else { TRACE(_T("%s (ID=%d) \n"), strActionText, wParam); } } } void CCalendarDemoView::CreateRemindersWindow() { if(!s_pDlgReminders || !s_pDlgReminders->GetSafeHwnd()) { if(!s_pDlgReminders) s_pDlgReminders = new CXTPCalendarRemindersDialog(); VERIFY( s_pDlgReminders->Create() ); s_pDlgReminders->CenterWindow(); s_pDlgReminders->SetRemindersManager(&GetCalendarCtrl()); } } void CCalendarDemoView::OnViewReminders() { s_pDlgReminders->ShowWindow(SW_SHOWNORMAL); } //void CCalendarDemoView::OnReminders(XTP_NOTIFY_CODE Event, WPARAM wParam , LPARAM lParam) //{ // UNREFERENCED_PARAMETER(lParam); // // if (Event != XTP_NC_CALENDAR_ON_REMINDERS) { // ASSERT(FALSE); // return; // } // // int eAction = (int)wParam; // if (eAction == xtpCalendarRemindersMonitoringStarted) // { // CreateRemindersWindow(); // } // if (eAction == xtpCalendarRemindersMonitoringStopped) // { // if (s_pDlgReminders) // { // delete s_pDlgReminders; // s_pDlgReminders = NULL; // } // } //} void CCalendarDemoView::OnBeforeDrawThemeObject(XTP_NOTIFY_CODE Event, WPARAM wParam , LPARAM lParam) { ASSERT(Event == XTP_NC_CALENDAR_BEFORE_DRAW_THEMEOBJECT); if (Event != XTP_NC_CALENDAR_BEFORE_DRAW_THEMEOBJECT) return; CXTPCalendarThemeOffice2007* pTheme2007 = DYNAMIC_DOWNCAST(CXTPCalendarThemeOffice2007, GetCalendarCtrl().GetTheme()); ASSERT(pTheme2007); if (!pTheme2007) return; static CFont s_fntStriked; if (s_fntStriked.m_hObject == NULL) { LOGFONT lfIcon; VERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lfIcon), &lfIcon, 0)); lfIcon.lfWeight = FW_BOLD; lfIcon.lfStrikeOut = 1; s_fntStriked.CreateFontIndirect(&lfIcon); } if (wParam == xtpCalendarBeforeDraw_DayViewEvent) { CXTPCalendarDayViewEvent* pViewEvent = (CXTPCalendarDayViewEvent*)lParam; if (pViewEvent && pViewEvent->GetEvent()->GetSubject().Left(1) == _T("*")) { pTheme2007->GetDayViewPartX()->GetDayPartX()->GetGroupPartX()->GetSingleDayEventPartX()->m_fcsetNormal.fcsetSubject.fntFont.SetCustomValue(&s_fntStriked); pTheme2007->GetDayViewPartX()->GetDayPartX()->GetGroupPartX()->GetMultiDayEventPartX()->m_fcsetNormal.fcsetSubject.fntFont.SetCustomValue(&s_fntStriked); pTheme2007->GetDayViewPartX()->GetDayPartX()->GetGroupPartX()->GetSingleDayEventPartX()->m_fcsetSelected.fcsetSubject.fntFont.SetCustomValue(&s_fntStriked); pTheme2007->GetDayViewPartX()->GetDayPartX()->GetGroupPartX()->GetMultiDayEventPartX()->m_fcsetSelected.fcsetSubject.fntFont.SetCustomValue(&s_fntStriked); } } if (wParam == xtpCalendarBeforeDraw_MonthViewDay) { CXTPCalendarMonthViewDay* pDay = (CXTPCalendarMonthViewDay*)lParam; if (pDay->GetDayDate().GetDayOfWeek() == 3) { pTheme2007->GetMonthViewPartX()->GetDayPartX()->m_clrBackgroundDark = RGB(196, 128, 128); pTheme2007->GetMonthViewPartX()->GetDayPartX()->m_clrBackgroundLight = RGB(230, 128, 128); pTheme2007->GetMonthViewPartX()->GetDayPartX()->m_clrBackgroundSelected = RGB(128, 228, 228); } } } void CCalendarDemoView::OnEvent_GetItemText(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); XTP_CALENDAR_GETITEMTEXT_PARAMS* pParams = (XTP_CALENDAR_GETITEMTEXT_PARAMS*)wParam ; if (XTP_NC_CALENDAR_GETITEMTEXT != Event || !pParams) return; if (xtpCalendarItemText_EventMarkupTemplate == pParams->nItem) { pParams->pstrText->Format(cstrMarkupDynamicSample); } if (xtpCalendarItemText_EventSubject == pParams->nItem) { // Dynamically customize Location text pParams->pstrText->MakeReverse(); } } CXTPCalendarControl_Custom::CXTPCalendarControl_Custom() { m_nToolTipMode = ctmStandard; } INT_PTR CXTPCalendarControl_Custom::OnToolHitTest(CPoint point, TOOLINFO* pTI) const { if(m_nToolTipMode == ctmCustom) { XTP_CALENDAR_HITTESTINFO hitTest; if( ((CXTPCalendarControl*)this)->GetActiveView()->HitTest(point, &hitTest)) { if(hitTest.pViewEvent) { pTI->hwnd = m_hWnd; // Handle to a window pTI->uId = (UINT_PTR)m_hWnd; // Handle to a child window pTI->uFlags |= TTF_IDISHWND | TTF_NOTBUTTON; CString strToolText; strToolText.Format(_T("[ID = 0x%08X] (%s - %s) %s"), hitTest.pViewEvent->GetEvent()->GetEventID(), hitTest.pViewEvent->FormatEventTime(hitTest.pViewEvent->GetEvent()->GetStartTime()), hitTest.pViewEvent->FormatEventTime(hitTest.pViewEvent->GetEvent()->GetEndTime()), hitTest.pViewEvent->GetEvent()->GetSubject() ); int nBuffSize = strToolText.GetLength()*2 +10; TCHAR* pBuffer = (TCHAR*)malloc(nBuffSize); STRCPY_S(pBuffer, nBuffSize, (LPCTSTR)strToolText); pTI->lpszText = pBuffer; return 333; } } } return CXTPCalendarControl::OnToolHitTest(point, pTI); } void CCalendarDemoView::OnEvent_PrePopulate(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); if (XTP_NC_CALENDAR_PREPOPULATE != Event) { ASSERT(FALSE); return; } // Theme 2007. CXTPCalendarThemeOffice2007* pTheme2007 = DYNAMIC_DOWNCAST(CXTPCalendarThemeOffice2007, GetCalendarCtrl().GetTheme()); if (!pTheme2007) return; // pTheme2007->SetBeforeDrawFlags(pTheme2007->GetBeforeDrawFlags() | xtpCalendarBeforeDraw_MonthViewDay); // pTheme2007->SetBeforeDrawFlags(pTheme2007->GetBeforeDrawFlags() | xtpCalendarBeforeDraw_DayViewEvent); // add icons for reminder and meting flags as custom icons // See Also: // CAdvancedCalendarOptionsDlg::OnOK() // The custom icons images added there and IDs assigned to them. // wParam - [in] CXTPCalendarViewGroup* - A pointer to Group View. // lParam - [in/out] CXTPCalendarEvents* - A pointer to events array to draw. CXTPCalendarEvents* pEvents = (CXTPCalendarEvents*)lParam; ASSERT(pEvents); if (!pEvents) return; int nCount = pEvents->GetCount(); for (int i = 0; i < nCount; i++) { CXTPCalendarEvent* pEvent = pEvents->GetAt(i); ASSERT(pEvent); if (!pEvent) continue; if (pEvent->IsReminder()) { pEvent->GetCustomIcons()->AddIfNeed((UINT)xtpCalendarEventIconIDReminder); } else { pEvent->GetCustomIcons()->RemoveID((UINT)xtpCalendarEventIconIDReminder); } if (pEvent->IsMeeting()) { pEvent->GetCustomIcons()->AddIfNeed((UINT)xtpCalendarEventIconIDMeeting); } else { pEvent->GetCustomIcons()->RemoveID((UINT)xtpCalendarEventIconIDMeeting); } //------------------------------------------------------------------- // There are 3 standard icons for Office2007 theme: // * recurrence occurrence // * recurrence exception // * private // Its IDs are from from XTPCalendarEventIconIDs enum. // If custom icons have an icon with the same ID as standard // icon - custom icon will be used instead of standard. //------------------------------------------------------------------- // this code customize private icon from the standard Office2007 // theme set. // // uncomment code below to see the customization. //if (pEvent->IsPrivate()) { // pEvent->GetCustomIcons()->AddIfNeed((UINT)xtpCalendarEventIconIDPrivate); //} //else { pEvent->GetCustomIcons()->RemoveID((UINT)xtpCalendarEventIconIDPrivate); } } } //void CCalendarDemoView::OnEvent_SelChanged(XTP_NOTIFY_CODE Event, // WPARAM wParam, LPARAM lParam) //{ // if (XTP_NC_CALENDAR_SELECTION_CHANGED != Event) { // ASSERT(FALSE); // return; // } // if(wParam != xtpCalendarSelectionEvents) { // return; // } // // static BOOL s_bInProgress = FALSE; // // CXTPCalendarView* pView = GetCalendarCtrl().GetActiveView(); // // if(!pView || s_bInProgress) { // return; // } // // if(pView->GetSelectedEvents()->GetCount() <= 1) { // return; // } // // // Protect from processing self sending notifications. // // // // see lines below: // // pView->UnselectAllEvents(); // will send XTP_NC_CALENDAR_SELECTION_CHANGED // // pView->SelectEvent(pLastSelEView->GetEvent()); // will send XTP_NC_CALENDAR_SELECTION_CHANGED // // // s_bInProgress = TRUE; // // CXTPCalendarViewEvent* pLastSelEView = pView->GetLastSelectedViewEvent(); // if(pLastSelEView) // { // // Lock event view // // for case when it can be destroyed in UnselectAllEvents() call. // pLastSelEView->InternalAddRef(); // // pView->UnselectAllEvents(); // pView->SelectEvent(pLastSelEView->GetEvent()); // // // Unlock event view // pLastSelEView->InternalRelease(); // } // // s_bInProgress = FALSE; //} void CCalendarDemoView::OnOfficeThemeChanged(int nCalendarTheme) { CXTPCalendarControl::CUpdateContext updateContext(&GetCalendarCtrl(), xtpCalendarUpdateAll); GetCalendarCtrl().SetPaintTheme((XTPCalendarTheme)nCalendarTheme); if (nCalendarTheme == xtpCalendarThemeOffice2007) { m_wndScrollBar.SetScrollBarStyle(xtpScrollStyleOffice2007Dark); } else { m_wndScrollBar.SetScrollBarStyle(xtpScrollStyleDefault); } }