XTPCalendarControlView.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:37k
源码类别:
对话框与窗口
开发平台:
Visual C++
- // XTPCalendarControlView.cpp : implementation of the CXTPCalendarControlView class.
- //
- // This file is a part of the XTREME CALENDAR 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 "Common/XTPVC50Helpers.h"
- #include "Common/XTPVC80Helpers.h"
- #include "Common/XTPResourceManager.h"
- #include "Common/XTPImageManager.h"
- #include "Common/resource.h"
- #include "XTPCalendarControlView.h"
- #include "XTPCalendarMonthView.h"
- #include "XTPCalendarThemeOffice2007.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- ////////////////////////////////////////////////////////////////////////////
- AFX_INLINE void MoveRectToXY(CRect& rc, int nX, int nY)
- {
- rc.right = nX + rc.Width();
- rc.bottom = nY + rc.Height();
- rc.left = nX;
- rc.top = nY;
- }
- //////////////////////////////////////////////////////
- BEGIN_MESSAGE_MAP(CXTPCalendarPageSetupDialog, CPageSetupDialog)
- ON_BN_CLICKED(XTP_IDC_PRINT_DATE_HEADER, OnBnClickedPrintDateHeader)
- ON_BN_CLICKED(XTP_IDC_PRINT_DATE_HEADER_FONT_BUTTON, OnBnClickedDateHeaderFont)
- ON_BN_CLICKED(XTP_IDC_CALENDAR_HEADER_FORMAT_BTN, OnBnClickedHeaderFormat)
- ON_BN_CLICKED(XTP_IDC_CALENDAR_FOOTER_FORMAT_BTN, OnBnClickedFooterFormat)
- END_MESSAGE_MAP()
- CXTPCalendarPageSetupDialog::CXTPCalendarPageSetupDialog(
- CXTPCalendarControlViewPrintOptions* pOptions,
- DWORD dwFlags, CWnd* pParentWnd)
- : CPageSetupDialog(dwFlags, pParentWnd)
- {
- ASSERT(pOptions);
- m_pOptions = pOptions;
- if (m_pOptions)
- {
- BOOL bIsInches = m_pOptions->IsMarginsMeasureInches();
- DWORD dwMeasure = bIsInches ? PSD_INTHOUSANDTHSOFINCHES : PSD_INHUNDREDTHSOFMILLIMETERS;
- m_psd.Flags &= ~PSD_INWININIINTLMEASURE;
- m_psd.Flags |= dwMeasure;
- }
- m_psd.Flags |= PSD_ENABLEPAGESETUPTEMPLATEHANDLE;
- m_psd.hPageSetupTemplate = XTPResourceManager()->LoadDialogTemplate2(MAKEINTRESOURCE(IDD));
- ASSERT(m_psd.hPageSetupTemplate);
- if (m_pOptions)
- {
- m_psd.rtMargin = m_pOptions->m_rcMargins;
- }
- m_nIDHelp = XTP_IDD_CALENDAR_PRINT_PAGE_SETUP;
- VERIFY( ::SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &m_lfDateHeader, 0 ) );
- }
- CXTPCalendarPageSetupDialog::~CXTPCalendarPageSetupDialog()
- {
- }
- #ifndef rad1
- #define rad1 0x0420
- #define rad2 0x0421
- #define grp4 0x0433
- #endif
- BOOL CXTPCalendarPageSetupDialog::OnInitDialog ()
- {
- CPageSetupDialog::OnInitDialog();
- ASSERT(m_pOptions);
- VERIFY( m_ctrlPrintFromCmb.SubclassDlgItem(XTP_IDC_PRINT_FROM_COMBO, this) );
- VERIFY( m_ctrlPrintToCmb.SubclassDlgItem(XTP_IDC_PRINT_TO_COMBO, this) );
- VERIFY( m_ctrlPrintFromTo.SubclassDlgItem(XTP_IDC_PRINT_FROMTO, this) );
- VERIFY( m_ctrlPrintDateHeader.SubclassDlgItem(XTP_IDC_PRINT_DATE_HEADER, this) );
- VERIFY( m_ctrlDateHeaderFontLabel.SubclassDlgItem(XTP_IDC_PRINT_DATE_HEADER_FONT_LABEL, this) );
- VERIFY( m_ctrlDateHeaderFont.SubclassDlgItem(XTP_IDC_PRINT_DATE_HEADER_FONT, this) );
- VERIFY( m_ctrlDateHeaderFontButton.SubclassDlgItem(XTP_IDC_PRINT_DATE_HEADER_FONT_BUTTON, this) );
- VERIFY( m_ctrlBlackWhitePrinting.SubclassDlgItem(XTP_IDC_PRINT_BLACK_WHITE, this) );
- VERIFY( m_ctrlHeaderFormat.SubclassDlgItem(XTP_IDC_CALENDAR_HEADER_FORMAT, this) );
- VERIFY( m_ctrlFooterFormat.SubclassDlgItem(XTP_IDC_CALENDAR_FOOTER_FORMAT, this) );
- VERIFY( m_ctrlHeaderFormatBtn.SubclassDlgItem(XTP_IDC_CALENDAR_HEADER_FORMAT_BTN, this) );
- VERIFY( m_ctrlFooterFormatBtn.SubclassDlgItem(XTP_IDC_CALENDAR_FOOTER_FORMAT_BTN, this) );
- CString strTimeFormat_HrMin = CXTPCalendarUtils::GetTimeFormatString_HrMin();
- CString strTime;
- for (int i = 0; i < 24*60; i += 30)
- {
- strTime = CXTPCalendarUtils::GetTimeFormat((int)(i / 60), (int)(i % 60), strTimeFormat_HrMin);
- m_ctrlPrintFromCmb.AddString(strTime);
- m_ctrlPrintToCmb.AddString(strTime);
- }
- if(m_pOptions)
- {
- strTime = CXTPCalendarUtils::GetTimeFormat(m_pOptions->m_dtPrintFrom, strTimeFormat_HrMin);
- m_ctrlPrintFromCmb.SetWindowText(strTime);
- strTime = CXTPCalendarUtils::GetTimeFormat(m_pOptions->m_dtPrintTo, strTimeFormat_HrMin);
- m_ctrlPrintToCmb.SetWindowText(strTime);
- m_ctrlPrintFromTo.SetCheck(m_pOptions->m_bPrintFromToExactly ? 1 : 0);
- m_ctrlPrintDateHeader.SetCheck(m_pOptions->m_bPrintDateHeader ? 1 : 0);
- m_ctrlBlackWhitePrinting.SetCheck(m_pOptions->m_bBlackWhitePrinting? 1 : 0);
- m_lfDateHeader = m_pOptions->m_lfDateHeaderFont;
- CString strFont = FormatFontName(m_lfDateHeader);
- m_ctrlDateHeaderFont.SetWindowText(strFont);
- if (m_pOptions->GetPageHeader())
- m_ctrlHeaderFormat.SetWindowText(m_pOptions->GetPageHeader()->m_strFormatString);
- if (m_pOptions->GetPageFooter())
- m_ctrlFooterFormat.SetWindowText(m_pOptions->GetPageFooter()->m_strFormatString);
- OnBnClickedPrintDateHeader();
- }
- XTP_SAFE_CALL1(GetDlgItem(rad1), EnableWindow(TRUE)); //1056 Portrait
- XTP_SAFE_CALL1(GetDlgItem(rad2), EnableWindow(TRUE)); //1057 Landscape
- BOOL bIsInches = m_pOptions ? m_pOptions->IsMarginsMeasureInches() : FALSE;
- UINT uStrID = bIsInches ? XTP_IDS_CALENDAR_MARGINS_INCH : XTP_IDS_CALENDAR_MARGINS_MM;
- CString strCaption = CXTPCalendarUtils::LoadString(uStrID);
- if (!strCaption.IsEmpty() && GetDlgItem(grp4))
- {
- GetDlgItem(grp4)->SetWindowText(strCaption);
- }
- HICON hBtnIcon = XTPResourceManager()->LoadIcon(XTP_IDI_BTN_ARROW_R, CSize(0,0));
- ASSERT(hBtnIcon);
- if (hBtnIcon)
- {
- m_ctrlHeaderFormatBtn.SetIcon(hBtnIcon);
- m_ctrlFooterFormatBtn.SetIcon(hBtnIcon);
- }
- return FALSE;
- }
- void CXTPCalendarPageSetupDialog::OnBnClickedPrintDateHeader()
- {
- int nCheck = m_ctrlPrintDateHeader.GetCheck();
- m_ctrlDateHeaderFont.EnableWindow(nCheck != 0);
- m_ctrlDateHeaderFontLabel.EnableWindow(nCheck != 0);
- m_ctrlDateHeaderFontButton.EnableWindow(nCheck != 0);
- }
- void CXTPCalendarPageSetupDialog::OnOK()
- {
- ASSERT(m_pOptions);
- if (!m_pOptions)
- {
- CPageSetupDialog::OnOK();
- return;
- }
- CString strFrom, strTo;
- m_ctrlPrintFromCmb.GetWindowText(strFrom);
- int nFrom_min = CXTPCalendarUtils::ParceTimeString_min(strFrom);
- m_ctrlPrintToCmb.GetWindowText(strTo);
- int nTo_min = CXTPCalendarUtils::ParceTimeString_min(strTo);
- m_pOptions->m_dtPrintFrom.SetTime(nFrom_min / 60, nFrom_min % 60, 0);
- m_pOptions->m_dtPrintTo.SetTime(nTo_min / 60, nTo_min % 60, 0);
- m_pOptions->m_bPrintFromToExactly = m_ctrlPrintFromTo.GetCheck() != 0;
- m_pOptions->m_bBlackWhitePrinting = m_ctrlBlackWhitePrinting.GetCheck() != 0;
- m_pOptions->m_bPrintDateHeader = m_ctrlPrintDateHeader.GetCheck() != 0;
- if (m_pOptions->m_bPrintDateHeader)
- {
- m_pOptions->m_lfDateHeaderFont = m_lfDateHeader;
- }
- m_pOptions->m_rcMargins = m_psd.rtMargin;
- if (m_pOptions->GetPageHeader())
- m_ctrlHeaderFormat.GetWindowText(m_pOptions->GetPageHeader()->m_strFormatString);
- if (m_pOptions->GetPageFooter())
- m_ctrlFooterFormat.GetWindowText(m_pOptions->GetPageFooter()->m_strFormatString);
- CPageSetupDialog::OnOK();
- }
- CString CXTPCalendarPageSetupDialog::FormatFontName(const LOGFONT& lfFont)
- {
- CClientDC dc(this);
- double dLogPixelY = dc.GetDeviceCaps(LOGPIXELSY);
- double dPointSize = abs(lfFont.lfHeight) * 72.0 / dLogPixelY;
- int nPointSize = (int)(dPointSize + 0.5);
- CString strFont;
- strFont.Format(_T(" %d pt. %s"), nPointSize, lfFont.lfFaceName);
- CString strAttr;
- if (lfFont.lfWeight >= FW_BOLD)
- {
- strAttr += _T(" Bold");
- }
- if (lfFont.lfItalic)
- {
- if (!strAttr.IsEmpty())
- {
- strAttr += _T(",");
- }
- strAttr += _T(" Italic");;
- }
- if (!strAttr.IsEmpty())
- {
- strFont += _T("n");
- strFont += strAttr;
- }
- return strFont;
- }
- void CXTPCalendarPageSetupDialog::OnBnClickedDateHeaderFont()
- {
- CFontDialog dlgFont(&m_lfDateHeader);
- int nDlgRes = (int)dlgFont.DoModal();
- if (nDlgRes == IDOK)
- {
- dlgFont.GetCurrentFont(&m_lfDateHeader);
- CString strFont = FormatFontName(m_lfDateHeader);
- m_ctrlDateHeaderFont.SetWindowText(strFont);
- }
- }
- void CXTPCalendarPageSetupDialog::OnBnClickedHeaderFormat()
- {
- CXTPPrintPageHeaderFooter::DoInsertHFFormatSpecifierViaMenu(
- this, &m_ctrlHeaderFormat, &m_ctrlHeaderFormatBtn);
- }
- void CXTPCalendarPageSetupDialog::OnBnClickedFooterFormat()
- {
- CXTPPrintPageHeaderFooter::DoInsertHFFormatSpecifierViaMenu(
- this, &m_ctrlFooterFormat, &m_ctrlFooterFormatBtn);
- }
- /////////////////////////////////////////////////////////////////////////////
- IMPLEMENT_DYNAMIC(CXTPCalendarControlViewPrintOptions, CXTPPrintOptions)
- CXTPCalendarControlViewPrintOptions::CXTPCalendarControlViewPrintOptions()
- {
- m_dtPrintFrom.SetTime(8, 0, 0);
- m_dtPrintTo.SetTime(19, 0, 0);
- m_bPrintFromToExactly = TRUE;
- LOGFONT lfIcon;
- VERIFY( ::SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof( lfIcon ), &lfIcon, 0 ) );
- m_bPrintDateHeader = TRUE;
- m_lfDateHeaderFont = lfIcon;
- m_lfDateHeaderFont.lfHeight = -24;
- m_lfDateHeaderFont.lfWeight = FW_BOLD;
- m_lfDateHeaderWeekDayFont = lfIcon;
- m_lfDateHeaderWeekDayFont.lfHeight = -max(abs(lfIcon.lfHeight), abs(m_lfDateHeaderFont.lfHeight*2/3));
- m_lfDateHeaderCalendarFont = lfIcon;
- }
- LCID CXTPCalendarControlViewPrintOptions::GetActiveLCID()
- {
- return CXTPCalendarUtils::GetActiveLCID();
- }
- void CXTPCalendarControlViewPrintOptions::Set(const CXTPCalendarControlViewPrintOptions* pSrc)
- {
- if (!pSrc)
- {
- return;
- }
- CXTPPrintOptions::Set(pSrc);
- m_dtPrintFrom = pSrc->m_dtPrintFrom;
- m_dtPrintTo = pSrc->m_dtPrintTo;
- m_bPrintFromToExactly = pSrc->m_bPrintFromToExactly;
- m_bPrintDateHeader = pSrc->m_bPrintDateHeader;
- m_lfDateHeaderFont = pSrc->m_lfDateHeaderFont;
- m_lfDateHeaderCalendarFont = pSrc->m_lfDateHeaderCalendarFont;
- }
- /////////////////////////////////////////////////////////////////////////////
- // CXTPCalendarControlView
- IMPLEMENT_DYNCREATE(CXTPCalendarControlView, CView)
- CXTPCalendarControlView::CXTPCalendarControlView()
- {
- m_pCalendar = NULL;
- m_pUpdateContect = NULL;
- m_bReleaseCalendarWhenDestroy = FALSE;
- m_bPrintDirect = FALSE;
- m_bResizeControlWithView = TRUE;
- m_bShowCaptionBar = FALSE;
- m_pScrollBar = NULL;
- m_pPrintOptions = new CXTPCalendarControlViewPrintOptions();
- }
- CXTPCalendarControlView::~CXTPCalendarControlView()
- {
- if (m_bReleaseCalendarWhenDestroy)
- {
- CMDTARGET_RELEASE(m_pCalendar);
- }
- ASSERT(m_pUpdateContect == NULL);
- SAFE_DELETE(m_pUpdateContect);
- CMDTARGET_RELEASE(m_pPrintOptions);
- }
- CXTPCalendarControl& CXTPCalendarControlView::GetCalendarCtrl()
- {
- return m_pCalendar == NULL ? m_wndCalendar : *m_pCalendar;
- }
- void CXTPCalendarControlView::SetCalendarCtrl(CXTPCalendarControl* pCalendar,
- BOOL bReleaseWhenDestroy)
- {
- if (::IsWindow(m_wndCalendar.GetSafeHwnd()))
- m_wndCalendar.DestroyWindow();
- m_pCalendar = pCalendar;
- m_bReleaseCalendarWhenDestroy = bReleaseWhenDestroy;
- m_Sink.UnadviseAll();
- m_Sink.Advise(GetCalendarCtrl().GetConnection(), XTP_NC_CALENDAR_THEME_CHANGED, &CXTPCalendarControlView::OnEvent_CalendarThemeChanged);
- _ResizeControls();
- }
- void CXTPCalendarControlView::SetScrollBarCtrl(CScrollBar* pScrollBar)
- {
- m_pScrollBar = pScrollBar;
- }
- BEGIN_MESSAGE_MAP(CXTPCalendarControlView, CView)
- //{{AFX_MSG_MAP(CXTPCalendarControlView)
- ON_WM_ERASEBKGND()
- ON_WM_SIZE()
- ON_WM_CREATE()
- ON_WM_SETFOCUS()
- ON_WM_PAINT()
- ON_WM_VSCROLL()
- ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
- ON_BN_CLICKED(ID_EDIT_UNDO, OnUndo)
- ON_BN_CLICKED(ID_EDIT_CUT, OnCut)
- ON_BN_CLICKED(ID_EDIT_COPY, OnCopy)
- ON_BN_CLICKED(ID_EDIT_PASTE, OnPaste)
- ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateCommand)
- ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateCommand)
- ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateCommand)
- ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateCommand)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CXTPCalendarControlView drawing
- void CXTPCalendarControlView::OnDraw(CDC* /*pDC*/)
- {
- }
- void CXTPCalendarControlView::OnPaint()
- {
- Default();
- }
- /////////////////////////////////////////////////////////////////////////////
- // CXTPCalendarControlView diagnostics
- #ifdef _DEBUG
- void CXTPCalendarControlView::AssertValid() const
- {
- CView::AssertValid();
- }
- void CXTPCalendarControlView::Dump(CDumpContext& dc) const
- {
- CView::Dump(dc);
- }
- #endif //_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // CXTPCalendarControlView message handlers
- BOOL CXTPCalendarControlView::OnEraseBkgnd(CDC* )
- {
- return TRUE;
- }
- CScrollBar* CXTPCalendarControlView::GetScrollBarCtrl(int nBar) const
- {
- if (nBar == SB_VERT && m_pScrollBar)
- return m_pScrollBar;
- return CView::GetScrollBarCtrl(nBar);
- }
- void CXTPCalendarControlView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
- if (m_pScrollBar && pScrollBar == m_pScrollBar)
- GetCalendarCtrl().OnVScroll(nSBCode, nPos, 0);
- CView::OnVScroll(nSBCode, nPos, pScrollBar);
- }
- void CXTPCalendarControlView::OnSize(UINT nType, int cx, int cy)
- {
- CView::OnSize(nType, cx, cy);
- if (!m_bResizeControlWithView)
- return;
- _ResizeControls();
- }
- void CXTPCalendarControlView::_ResizeControls()
- {
- if (!m_bResizeControlWithView)
- return;
- CXTPClientRect rcClient(this);
- int cx = rcClient.Width();
- int cy = rcClient.Height();
- int nCalendarY = 0;
- //BOOL bThemeOffice2007 = !!DYNAMIC_DOWNCAST(CXTPCalendarThemeOffice2007, GetCalendarCtrl().GetTheme());
- if (m_wndCalendarCaptionBar.GetSafeHwnd())
- {
- if (m_bShowCaptionBar/* && bThemeOffice2007*/)
- {
- CRect rcCaptionBar = m_wndCalendarCaptionBar.CalcMinRect(NULL);
- nCalendarY = rcCaptionBar.Height();
- if ((m_wndCalendarCaptionBar.GetStyle() & WS_VISIBLE) == 0)
- {
- m_wndCalendarCaptionBar.ShowWindow(SW_SHOW);
- m_wndCalendarCaptionBar.GetTheme()->AttachCalendar(&GetCalendarCtrl());
- }
- }
- else
- {
- if ((m_wndCalendarCaptionBar.GetStyle() & WS_VISIBLE))
- {
- m_wndCalendarCaptionBar.ShowWindow(SW_HIDE);
- m_wndCalendarCaptionBar.GetTheme()->AttachCalendar(NULL);
- }
- }
- m_wndCalendarCaptionBar.MoveWindow(0, 0, cx, nCalendarY);
- }
- if (m_pScrollBar && m_pScrollBar->GetSafeHwnd())
- {
- int nScroll = GetSystemMetrics(SM_CXVSCROLL);
- m_pScrollBar->MoveWindow(cx - nScroll, nCalendarY, nScroll, cy - nCalendarY);
- cx -= nScroll;
- }
- if (GetCalendarCtrl().GetSafeHwnd())
- {
- GetCalendarCtrl().MoveWindow(0, nCalendarY, cx, max(0, cy - nCalendarY));
- }
- }
- BOOL CXTPCalendarControlView::IsShowCaptionBar()
- {
- return m_bShowCaptionBar;
- }
- void CXTPCalendarControlView::ShowCaptionBar(BOOL bShow)
- {
- if (m_bShowCaptionBar != bShow)
- {
- m_bShowCaptionBar = bShow;
- _ResizeControls();
- if (m_hWnd)
- Invalidate(NULL);
- }
- }
- void CXTPCalendarControlView::OnEvent_CalendarThemeChanged(XTP_NOTIFY_CODE Event, WPARAM wParam , LPARAM lParam)
- {
- UNREFERENCED_PARAMETER(Event); UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(lParam);
- ASSERT(Event == XTP_NC_CALENDAR_THEME_CHANGED);
- _ResizeControls();
- if (m_hWnd)
- Invalidate(NULL);
- }
- int CXTPCalendarControlView::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CView::OnCreate(lpCreateStruct) == -1)
- return -1;
- if (!m_wndCalendarCaptionBar.Create(WS_CHILD | WS_TABSTOP/* | WS_VISIBLE*/,
- CRect(0, 0, 0, 0), this, XTP_ID_CALENDARCAPTIONBAR_CONTROL) )
- {
- TRACE(_T("Failed to create Calendar Caption Bar control windown"));
- return -1;
- }
- if (!GetCalendarCtrl().Create(WS_CHILD | WS_TABSTOP | WS_VISIBLE,
- CRect(0, 0, 0, 0), this, XTP_ID_CALENDAR_CONTROL) )
- {
- TRACE(_T("Failed to create Calendar control windown"));
- return -1;
- }
- _ResizeControls();
- return 0;
- }
- void CXTPCalendarControlView::OnSetFocus(CWnd* pOldWnd)
- {
- CView::OnSetFocus(pOldWnd);
- GetCalendarCtrl().SetFocus();
- }
- /////////////////////////////////////////////////////////////////////////////
- // CReportSampleView printing
- BOOL CXTPCalendarControlView::OnPreparePrinting(CPrintInfo* pInfo)
- {
- pInfo->m_bDirect = m_bPrintDirect;
- pInfo->m_nNumPreviewPages = 1;
- pInfo->SetMinPage(1);
- pInfo->SetMaxPage(1);
- // default preparation
- return DoPreparePrinting(pInfo);
- }
- void CXTPCalendarControlView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
- {
- UNREFERENCED_PARAMETER(pDC); UNREFERENCED_PARAMETER(pInfo);
- m_pritAdjustContext.Reset();
- GetCalendarCtrl().EnableSendNotifications(FALSE);
- ASSERT(m_pUpdateContect == NULL);
- SAFE_DELETE(m_pUpdateContect);
- m_pUpdateContect = new CXTPCalendarControl::CUpdateContext(&GetCalendarCtrl(), xtpCalendarUpdateRedraw);
- m_beforePrintState.Save(this);
- }
- void CXTPCalendarControlView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
- {
- m_beforePrintState.Restore(this);
- m_beforePrintState.ClearData();
- GetCalendarCtrl().AdjustLayout();
- GetCalendarCtrl().EnableSendNotifications();
- m_pritAdjustContext.Reset();
- m_bmpGrayDC.DeleteObject();
- ASSERT(m_pUpdateContect);
- SAFE_DELETE(m_pUpdateContect);
- }
- CRect CXTPCalendarControlView::AdjustCalendarForPrint(CDC* pDC, CRect rcCalendar,
- CXTPCalendarControlViewPrintOptions* pOptions)
- {
- //===========================================================================
- GetCalendarCtrl().AdjustLayout(pDC, rcCalendar);
- //===========================================================================
- int nViewType = GetCalendarCtrl().GetActiveView()->GetViewType();
- if (nViewType == xtpCalendarDayView || nViewType == xtpCalendarWorkWeekView)
- {
- CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetDayView());
- ASSERT(pDayView);
- if (!pDayView)
- {
- return rcCalendar;
- }
- int dbg_nAdjustSmall = 0;
- int dbg_nAdjustScale = 0;
- int nHeightNeed_prev = 0;
- for (int nLoop = 0; nLoop < 100; nLoop++)
- {
- int nStartCell = pDayView->GetCellNumber(pOptions->m_dtPrintFrom, FALSE);
- int nEndCell = pDayView->GetCellNumber(pOptions->m_dtPrintTo, TRUE);
- int nCellCount = nEndCell - nStartCell + 1;
- int nCelHeight = pDayView->GetRowHeight();
- CRect rcHeader = pDayView->GetDayHeaderRectangle();
- CRect rcAllDayArea = pDayView->GetAllDayEventsRectangle();
- int nHeightNeed = nCellCount * nCelHeight + rcHeader.Height() +
- rcAllDayArea.Height();
- if (rcCalendar.Height() >= nHeightNeed)
- {
- if (!pOptions->m_bPrintFromToExactly)
- {
- pDayView->_ScrollV(nStartCell, nStartCell);
- break;
- }
- else
- {
- dbg_nAdjustSmall++;
- rcCalendar.bottom = rcCalendar.top + nHeightNeed;
- GetCalendarCtrl().AdjustLayout(pDC, rcCalendar);
- pDayView->_ScrollV(nStartCell, nStartCell);
- if (nHeightNeed_prev == nHeightNeed)
- {
- //GetCalendarCtrl().AdjustLayout(pDC, rcCalendar);
- break;
- }
- nHeightNeed_prev = nHeightNeed;
- }
- }
- else
- {
- COleDateTimeSpan spScale = pDayView->GetScaleInterval();
- int nScale_min = GETTOTAL_MINUTES_DTS(spScale);
- if (nScale_min < 60)
- {
- dbg_nAdjustScale++;
- //int arIntervals[] = {5, 10, 15, 30, 60, 120, 150, 180};
- int arIntervals[] = {5, 10, 15, 30, 60};
- for (int i = 0; i < _countof(arIntervals); i++)
- {
- if (arIntervals[i] > nScale_min)
- {
- spScale = CXTPCalendarUtils::Minutes2Span(arIntervals[i]);
- break;
- }
- }
- pDayView->SetScaleInterval(spScale);
- GetCalendarCtrl().AdjustLayout(pDC, rcCalendar);
- }
- else
- {
- break;
- }
- }
- }
- GetCalendarCtrl().AdjustLayout(pDC, rcCalendar);
- //TRACE(_T("DBG. Calendar, PrePrintAdjust Counts: Scale = %d, small = %d, All Loops (max 100)= %d n"),
- // dbg_nAdjustScale, dbg_nAdjustSmall, nLoop+1);
- }
- return rcCalendar;
- }
- void CXTPCalendarControlView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
- {
- if (!m_pPrintOptions || !pDC || !pInfo)
- {
- ASSERT(FALSE);
- return;
- }
- CRect rcMargins = m_pPrintOptions->GetMarginsLP(pDC);
- CRect rcPrint = pInfo->m_rectDraw;
- rcPrint.DeflateRect(rcMargins);
- //----------------------------------------------------------
- if (!m_pPrintOptions->m_bBlackWhitePrinting)
- {
- _OnPrint2(pDC, pInfo, rcPrint);
- }
- else
- {
- CRect rcPrint00(0, 0, rcPrint.Width(), rcPrint.Height());
- CDC memDC;
- VERIFY(memDC.CreateCompatibleDC(pDC));
- memDC.m_bPrinting = TRUE;
- if (!m_bmpGrayDC.m_hObject || m_bmpGrayDC.GetBitmapDimension() != rcPrint00.Size())
- {
- m_bmpGrayDC.DeleteObject();
- m_bmpGrayDC.CreateCompatibleBitmap(pDC, rcPrint00.Width(), rcPrint00.Height());
- }
- CXTPBitmapDC autpBmp(&memDC, &m_bmpGrayDC);
- //----------------------------------------------------
- memDC.FillSolidRect(rcPrint00, RGB(255, 255, 255));
- _OnPrint2(&memDC, pInfo, rcPrint00);
- int nCC = max(0, min(m_pPrintOptions->m_nBlackWhiteContrast, 255));
- XTPImageManager()->BlackWhiteBitmap(memDC, rcPrint00, nCC);
- pDC->BitBlt(rcPrint.left, rcPrint.top, rcPrint.Width(), rcPrint.Height(),
- &memDC, 0, 0, SRCCOPY);
- }
- }
- void CXTPCalendarControlView::_OnPrint2(CDC* pDC, CPrintInfo* pInfo, CRect rcPrint)
- {
- UNREFERENCED_PARAMETER(pInfo);
- m_pritAdjustContext.m_rcHeader = rcPrint;
- m_pritAdjustContext.m_rcFooter = rcPrint;
- CString strTitle = CXTPPrintPageHeaderFooter::GetParentFrameTitle(this);
- m_pPrintOptions->GetPageHeader()->FormatTexts(pInfo, strTitle);
- m_pPrintOptions->GetPageFooter()->FormatTexts(pInfo, strTitle);
- m_pPrintOptions->GetPageFooter()->Draw(pDC, m_pritAdjustContext.m_rcFooter, TRUE);
- m_pPrintOptions->GetPageHeader()->Draw(pDC, m_pritAdjustContext.m_rcHeader);
- rcPrint.top += m_pritAdjustContext.m_rcHeader.Height();
- rcPrint.bottom -= m_pritAdjustContext.m_rcFooter.Height();
- //-----------------------------------------------------------------------
- CRect rcCalendar = rcPrint;
- if (m_pPrintOptions->m_bPrintDateHeader)
- {
- m_pritAdjustContext.m_rcDateHeader = rcPrint;
- DrawDateHeader(FALSE, pDC, m_pPrintOptions, m_pritAdjustContext.m_rcDateHeader);
- rcCalendar.top = m_pritAdjustContext.m_rcDateHeader.bottom + 2;
- }
- rcCalendar.DeflateRect(2, 2, 2, 2);
- if (m_pritAdjustContext.m_bAdjust ||
- m_pritAdjustContext.m_rectDraw_prev != rcCalendar)
- {
- m_pritAdjustContext.m_rcCalendar = AdjustCalendarForPrint(pDC, rcCalendar, m_pPrintOptions);
- m_pritAdjustContext.m_rectDraw_prev = rcCalendar;
- m_pritAdjustContext.m_bAdjust = FALSE;
- }
- //===========================================================================
- pDC->IntersectClipRect(&m_pritAdjustContext.m_rcCalendar);
- //************************************************************************
- GetCalendarCtrl().OnDraw(pDC);
- //************************************************************************
- pDC->SelectClipRgn(NULL);
- CRect rcBorder = m_pritAdjustContext.m_rcCalendar;
- rcBorder.InflateRect(1, 1, 1, 1);
- pDC->Draw3dRect(&rcBorder, 0, 0);
- rcBorder.InflateRect(1, 1, 1, 1);
- pDC->Draw3dRect(&rcBorder, 0, 0);
- m_pPrintOptions->GetPageFooter()->Draw(pDC, m_pritAdjustContext.m_rcFooter);
- }
- void CXTPCalendarControlView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
- {
- UNREFERENCED_PARAMETER(pInfo);
- ASSERT_VALID(this);
- ASSERT_VALID(pDC);
- ASSERT(pInfo != NULL); // overriding OnPaint -- never get this.
- pDC->SetMapMode(MM_ANISOTROPIC);
- pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),
- pDC->GetDeviceCaps(LOGPIXELSY));
- pDC->SetWindowExt(100, 100);
- // ptOrg is in logical coordinates
- pDC->OffsetWindowOrg(0, 0);
- }
- void CXTPCalendarControlView::DrawDateHeader(BOOL bCalculate, CDC* pDC,
- CXTPCalendarControlViewPrintOptions* pOptions,
- CRect& rrcHeader)
- {
- COleDateTime dtYearMonth1, dtYearMonth2;
- CString strHeader1, strHeader2, strHeaderWeekDay;
- int nMonths = _GetDateHeaderMonths(dtYearMonth1, dtYearMonth2, strHeader1,
- strHeader2, strHeaderWeekDay);
- if (!strHeader2.IsEmpty())
- {
- strHeader1 += _T(" -");
- }
- CRect rcCalendar1 = rrcHeader;
- CRect rcCalendar2(0, 0, 0, 0);
- _DrawDateHeaderCalendar(TRUE, pDC, pOptions, dtYearMonth1, rcCalendar1);
- int nCalendar1XPos = rrcHeader.right - rcCalendar1.Width() * 11/10;
- int nCalendar2XPos = nCalendar1XPos;
- CFont fntDateHeader;
- VERIFY( fntDateHeader.CreateFontIndirect(&pOptions->m_lfDateHeaderFont) );
- CXTPFontDC fntDC(pDC, &fntDateHeader);
- CSize sizeText = pDC->GetTextExtent(strHeader1);
- CFont fntDateHeaderWeekDay;
- VERIFY( fntDateHeaderWeekDay.CreateFontIndirect(&pOptions->m_lfDateHeaderWeekDayFont) );
- fntDC.SetFont(&fntDateHeaderWeekDay);
- CSize sizeTextWD = pDC->GetTextExtent(_T("WD"), 2);
- int nDatesCaptionHeight = sizeText.cy * 225/100 + sizeTextWD.cy * 125/100;
- int nMaxHeight = max(rcCalendar1.Height() * 11/10, nDatesCaptionHeight);
- rrcHeader.bottom = rrcHeader.top + nMaxHeight;
- int nCalendarYPos = rrcHeader.top + nMaxHeight/2 - rcCalendar1.Height() / 2;
- MoveRectToXY(rcCalendar1, nCalendar1XPos, nCalendarYPos);
- if (bCalculate)
- {
- return;
- }
- //===========================================================================
- COLORREF clrPrev = pDC->SetTextColor(0);
- int nBkModePrev = pDC->SetBkMode(TRANSPARENT);
- //---------------------------------------------------------------------------
- if (nMonths > 1)
- {
- rcCalendar2 = rcCalendar1;
- nCalendar2XPos = nCalendar1XPos - rcCalendar1.Width() * 11 / 10;
- MoveRectToXY(rcCalendar1, nCalendar2XPos, nCalendarYPos);
- }
- if (!m_pPrintOptions->m_bBlackWhitePrinting)
- pDC->FillSolidRect(&rrcHeader, RGB(229, 229, 229));
- pDC->Draw3dRect(&rrcHeader, 0, 0);
- _DrawDateHeaderCalendar(FALSE, pDC, pOptions, dtYearMonth1, rcCalendar1);
- if (nMonths > 1)
- {
- _DrawDateHeaderCalendar(FALSE, pDC, pOptions, dtYearMonth2, rcCalendar2);
- }
- CRect rcHeader1(0, 0, 0, 0);
- CRect rcHeader2(0, 0, 0, 0);
- CRect rcHeader3(0, 0, 0, 0);
- rcHeader1 = rrcHeader;
- rcHeader1.DeflateRect(10, 5, 10, 5);
- rcHeader1.right = nCalendar2XPos - 20;
- rcHeader2 = rcHeader1;
- fntDC.SetFont(&fntDateHeader);
- UINT uDrawFlags = DT_TOP | DT_LEFT | DT_WORDBREAK | DT_NOPREFIX;
- int nHeight1 = pDC->DrawText(strHeader1, &rcHeader1, uDrawFlags);
- if (!strHeader2.IsEmpty())
- {
- rcHeader2.top += nHeight1 + sizeText.cy / 4;
- if (rcHeader2.top < rcHeader2.bottom)
- {
- pDC->DrawText(strHeader2, &rcHeader2, uDrawFlags);
- }
- }
- if (!strHeaderWeekDay.IsEmpty())
- {
- fntDC.SetFont(&fntDateHeaderWeekDay);
- rcHeader3 = rcHeader2;
- rcHeader3.top += nHeight1 + sizeTextWD.cy / 5;
- if (rcHeader3.top < rcHeader3.bottom)
- {
- pDC->DrawText(strHeaderWeekDay, &rcHeader3, uDrawFlags);
- }
- }
- //---------------------------------------------------------------------------
- pDC->SetTextColor(clrPrev);
- pDC->SetBkMode(nBkModePrev);
- }
- void CXTPCalendarControlView::_DrawDateHeaderCalendar(BOOL bCalculate,
- CDC* pDC,
- CXTPCalendarControlViewPrintOptions* pOptions,
- COleDateTime dtYearMonth,
- CRect& rrcHeaderCalendar)
- {
- LOGFONT lfCalWeek = pOptions->m_lfDateHeaderCalendarFont;
- lfCalWeek.lfHeight = lfCalWeek.lfHeight * 8 / 10;
- CFont fntCalendarWeek;
- VERIFY( fntCalendarWeek.CreateFontIndirect(&lfCalWeek) );
- CFont fntCalendar;
- VERIFY( fntCalendar.CreateFontIndirect(&pOptions->m_lfDateHeaderCalendarFont) );
- CXTPFontDC fntDC(pDC, &fntCalendar);
- CSize sizeCellText = pDC->GetTextExtent(_T("88"), 2);
- CSize sizeCell = sizeCellText;
- sizeCell.cx = sizeCell.cx * 13 / 10;
- sizeCell.cy = sizeCell.cy * 11 / 10;
- int nMonthRowY = sizeCellText.cy;
- int nWSaysRowY = sizeCellText.cy * 13 / 10;
- rrcHeaderCalendar.right = rrcHeaderCalendar.left + sizeCell.cx * 9;
- rrcHeaderCalendar.bottom = rrcHeaderCalendar.top + nMonthRowY + nWSaysRowY
- + sizeCell.cy * 6;
- if (bCalculate)
- {
- return;
- }
- int nFirstDayOfWeek = GetCalendarCtrl().GetFirstDayOfWeek();
- COleDateTime dtMonthFirst = dtYearMonth;
- VERIFY( CXTPCalendarUtils::UpdateMonthDay(dtMonthFirst, 1) );
- int nMaxMonthDay = CXTPCalendarUtils::GetMaxMonthDay(dtYearMonth);
- CStringArray arWDNames;
- int i;
- for (i = 0; i < 7; i++)
- {
- CString sWD = CXTPCalendarUtils::GetLocaleString(LOCALE_SABBREVDAYNAME1 + ((i-1+7)%7), 100);
- arWDNames.Add(sWD);
- }
- int nMonth = dtYearMonth.GetMonth();
- int nYear = dtYearMonth.GetYear();
- CString strMonthName = CXTPCalendarUtils::GetLocaleString(LOCALE_SMONTHNAME1 + nMonth - 1, 100);
- CString strMonthYear;
- strMonthYear.Format(_T("%s %d"), (LPCTSTR)strMonthName, nYear);
- //===========================================================================
- COLORREF clrPrev = pDC->SetTextColor(0);
- int nBkModePrev = pDC->SetBkMode(TRANSPARENT);
- //---------------------------------------------------------------------------
- CRect rcText = rrcHeaderCalendar;
- rcText.left += sizeCell.cx;
- pDC->DrawText(strMonthYear, &rcText, DT_TOP | DT_CENTER | DT_SINGLELINE);
- rcText = rrcHeaderCalendar;
- rcText.top += sizeCell.cy;
- for (i = 0; i < 7; i++)
- {
- rcText.left += sizeCell.cx;
- rcText.right = rcText.left + sizeCell.cx;
- int nMidx = (nFirstDayOfWeek-1+i) % 7;
- CString strWD = arWDNames[nMidx];
- pDC->DrawText((LPCTSTR)strWD, 1, &rcText, DT_TOP | DT_RIGHT | DT_SINGLELINE);
- }
- CRect rcLine1 = rrcHeaderCalendar;
- rcLine1.left += sizeCell.cx - 0;
- rcLine1.top += nMonthRowY + nWSaysRowY - 1;
- rcLine1.bottom = rcLine1.top + 1;
- CRect rcLine2 = rrcHeaderCalendar;
- rcLine2.left = rcLine1.left;
- rcLine2.right = rcLine2.left + 1;
- rcLine2.top = rcLine1.top;
- pDC->FillSolidRect(&rcLine1, 0);
- pDC->FillSolidRect(&rcLine2, 0);
- int nDay = 1 - (dtMonthFirst.GetDayOfWeek() - nFirstDayOfWeek + 7) % 7;
- int nFirstWeekOfYearDays = 1;
- COleDateTimeSpan spFWofY(nFirstWeekOfYearDays - 1);
- COleDateTime dtWeekLast = dtMonthFirst + COleDateTimeSpan(nDay+6-1);
- int nFirstWeekNumber = ((dtWeekLast - spFWofY).GetDayOfYear() - 1) / 7 + 1;
- //--------------------------
- int nTodayDay_toMark = 0;
- COleDateTime dtToday = CXTPCalendarUtils::GetCurrentTime();
- if (dtYearMonth.GetYear() == dtToday.GetYear() &&
- dtYearMonth.GetMonth() == dtToday.GetMonth())
- {
- nTodayDay_toMark = dtToday.GetDay();
- }
- CString strDay, strWeek;
- for (int w = 0; w < 6; w++)
- {
- rcText.top = rrcHeaderCalendar.top + nMonthRowY + nWSaysRowY + sizeCell.cy * w;
- if (nDay <= nMaxMonthDay)
- {
- CRect rcWeek = rcText;
- rcWeek.left = rrcHeaderCalendar.left;
- rcWeek.right = rcWeek.left + sizeCell.cx - 2;
- strWeek.Format(_T("%d"), nFirstWeekNumber + w);
- CXTPFontDC fntDCweek(pDC, &fntCalendarWeek);
- pDC->DrawText(strWeek, &rcWeek, DT_TOP | DT_RIGHT | DT_SINGLELINE);
- }
- //--------------------------------------------------------------------
- for (i = 0; i < 7; i++)
- {
- if (nDay > 0 && nDay <= nMaxMonthDay)
- {
- rcText.left = rrcHeaderCalendar.left + sizeCell.cx * (i + 1);
- rcText.right = rcText.left + sizeCell.cx;
- strDay.Format(_T("%d"), nDay);
- pDC->DrawText(strDay, &rcText, DT_TOP | DT_RIGHT | DT_SINGLELINE);
- if (nDay == nTodayDay_toMark)
- {
- CRect rcToday = rcText;
- rcToday.left += max(1, sizeCell.cx/10);
- rcToday.right += max(1, sizeCell.cx/10);
- rcToday.bottom = rcToday.top + sizeCell.cy;
- CBrush brFrame(RGB(82, 82, 82));
- pDC->FrameRect(&rcToday, &brFrame);
- }
- }
- nDay++;
- }
- }
- //---------------------------------------------------------------------------
- pDC->SetTextColor(clrPrev);
- pDC->SetBkMode(nBkModePrev);
- }
- int CXTPCalendarControlView::_GetDateHeaderMonths(COleDateTime& dtYearMonth1, COleDateTime& dtYearMonth2,
- CString& strHeader1, CString& strHeader2,
- CString& strHeaderWeekDay)
- {
- strHeader1 = strHeader2 = strHeaderWeekDay = _T("");
- dtYearMonth1 = dtYearMonth2 = (DATE)0;
- SYSTEMTIME st;
- int nViewType = GetCalendarCtrl().GetActiveView()->GetViewType();
- if (nViewType == xtpCalendarDayView ||
- nViewType == xtpCalendarWorkWeekView || nViewType == xtpCalendarFullWeekView)
- {
- CXTPCalendarDayView* pDayView = DYNAMIC_DOWNCAST(CXTPCalendarDayView, GetCalendarCtrl().GetDayView());
- ASSERT(pDayView);
- if (!pDayView)
- {
- return 0;
- }
- dtYearMonth1 = pDayView->GetViewDayDate(0);
- GETASSYSTEMTIME_DT(dtYearMonth1, st);
- strHeader1 = CXTPCalendarUtils::GetDateFormat(&st, _T("d MMMM"));
- int nCount = pDayView->GetViewDayCount();
- if (nCount > 1)
- {
- dtYearMonth2 = pDayView->GetViewDayDate(nCount-1);
- GETASSYSTEMTIME_DT(dtYearMonth2, st);
- strHeader2 = CXTPCalendarUtils::GetDateFormat(&st, _T("d MMMM"));
- if (dtYearMonth1.GetMonth() != dtYearMonth2.GetMonth())
- {
- return 2;
- }
- }
- if (nCount == 1)
- {
- COleDateTime dtDay0 = pDayView->GetViewDayDate(0);
- int nWd = dtDay0.GetDayOfWeek();
- int nWdShift = (nWd-1 + 6)%7;
- strHeaderWeekDay = CXTPCalendarUtils::GetLocaleString(LOCALE_SDAYNAME1 + nWdShift, 100);
- }
- return 1;
- }
- else if (nViewType == xtpCalendarWeekView)
- {
- CXTPCalendarView* pView = GetCalendarCtrl().GetActiveView();
- ASSERT(pView);
- if (!pView)
- {
- return 0;
- }
- dtYearMonth1 = pView->GetViewDayDate(0);
- dtYearMonth2 = pView->GetViewDayDate(pView->GetViewDayCount()-1);
- CString strHeaderFormat = pView->GetDayHeaderFormat();
- GETASSYSTEMTIME_DT(dtYearMonth1, st);
- strHeader1 = CXTPCalendarUtils::GetDateFormat(&st, strHeaderFormat);
- GETASSYSTEMTIME_DT(dtYearMonth2, st);
- strHeader2 = CXTPCalendarUtils::GetDateFormat(&st, strHeaderFormat);
- return 1;
- }
- else if (nViewType == xtpCalendarMonthView)
- {
- CXTPCalendarMonthView* pMonthView = DYNAMIC_DOWNCAST(CXTPCalendarMonthView, GetCalendarCtrl().GetMonthView());
- if (!pMonthView || !pMonthView->GetGrid())
- {
- ASSERT(FALSE);
- return 0;
- }
- int nWeeksCount = pMonthView->GetGrid()->GetWeeksCount();
- ASSERT(nWeeksCount);
- if (nWeeksCount)
- {
- CXTPCalendarMonthViewDay* pMVday1 = pMonthView->GetGrid()->GetViewDay(0, 6);
- CXTPCalendarMonthViewDay* pMVday2 = pMonthView->GetGrid()->GetViewDay(nWeeksCount-1, 0);
- if (pMVday1 && pMVday2)
- {
- dtYearMonth1 = pMVday1->GetDayDate();
- GETASSYSTEMTIME_DT(dtYearMonth1, st);
- strHeader1 = CXTPCalendarUtils::GetDateFormat(&st, _T("MMMM yyyy"));
- COleDateTime dtLast = pMVday2->GetDayDate();
- if (dtYearMonth1.GetMonth() != dtLast.GetMonth())
- {
- dtYearMonth2 = dtLast;
- GETASSYSTEMTIME_DT(dtYearMonth2, st);
- strHeader2 = CXTPCalendarUtils::GetDateFormat(&st, _T("MMMM yyyy"));
- return 2;
- }
- return 1;
- }
- }
- }
- else
- {
- ASSERT(FALSE);
- }
- return 0;
- }
- CRect CXTPCalendarControlView::_HimetricToLP(CDC* pDC, const CRect rcHimetric)
- {
- CSize szLT(rcHimetric.left, rcHimetric.top);
- CSize szRB(rcHimetric.right, rcHimetric.bottom);
- pDC->HIMETRICtoLP(&szLT);
- pDC->HIMETRICtoLP(&szRB);
- CRect rcLP(szLT.cx, szLT.cy, szRB.cx, szRB.cy);
- return rcLP;
- }
- //////////////////////////////////////////////////////////////////////////
- // Clipboard operations
- void CXTPCalendarControlView::OnUndo()
- {
- GetCalendarCtrl().OnUndo();
- }
- void CXTPCalendarControlView::OnCut()
- {
- CWnd* pFocusWnd = GetFocus();
- if (pFocusWnd)
- {
- LRESULT lRes = pFocusWnd->SendMessage(WM_COMMAND, ID_EDIT_CUT, NULL);
- if (!lRes)
- {
- pFocusWnd->SendMessage(WM_CUT);
- }
- }
- }
- void CXTPCalendarControlView::OnCopy()
- {
- CWnd* pFocusWnd = GetFocus();
- if (pFocusWnd)
- {
- LRESULT lRes = pFocusWnd->SendMessage(WM_COMMAND, ID_EDIT_COPY, NULL);
- if (!lRes)
- {
- pFocusWnd->SendMessage(WM_COPY);
- }
- }
- }
- void CXTPCalendarControlView::OnPaste()
- {
- CWnd* pFocusWnd = GetFocus();
- if (pFocusWnd)
- {
- LRESULT lRes = pFocusWnd->SendMessage(WM_COMMAND, ID_EDIT_PASTE, NULL);
- if (!lRes)
- {
- pFocusWnd->SendMessage(WM_PASTE);
- }
- }
- }
- void CXTPCalendarControlView::OnUpdateCommand(CCmdUI* pCmdUI)
- {
- GetCalendarCtrl().OnUpdateCmdUI(pCmdUI);
- }
- void CXTPCalendarControlView::OnFilePageSetup()
- {
- DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE;
- CXTPCalendarPageSetupDialog dlgPageSetup(GetPrintOptions(), dwFlags, this);
- XTPGetPrinterDeviceDefaults(dlgPageSetup.m_psd.hDevMode, dlgPageSetup.m_psd.hDevNames);
- int nDlgRes = (int)dlgPageSetup.DoModal();
- if (nDlgRes == IDOK)
- {
- AfxGetApp()->SelectPrinter(dlgPageSetup.m_psd.hDevNames, dlgPageSetup.m_psd.hDevMode, FALSE);
- }
- }