calendarbar.cpp

来自「RFID读卡器源码,vc.net编写,bcgp界面控件」· C++ 代码 · 共 206 行

CPP
206
字号
// CalendarBar.cpp : implementation file
//

#include "stdafx.h"
#include "RFID_DesktopReader.h"
#include "CalendarBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCalendarBar

CCalendarBar::CCalendarBar()
{
	m_sizeCalendar = CSize (0, 0);
	m_nVisibleCalendars = 0;
}

CCalendarBar::~CCalendarBar()
{
}


BEGIN_MESSAGE_MAP(CCalendarBar, CWnd)
	//{{AFX_MSG_MAP(CCalendarBar)
	ON_WM_CREATE()
	ON_WM_ERASEBKGND()
	ON_WM_SIZE()
	ON_WM_PAINT()
	ON_WM_SETTINGCHANGE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CCalendarBar message handlers

int CCalendarBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	CRect rectDummy (0, 0, 0, 0);
	for (int i = 0; i < 12; i ++)
	{
		m_arBars [i].CreateControl (this, rectDummy, (UINT)-1,
			FALSE, WS_CHILD);
		m_arBars [i].SetState (CBCGPCalendarBar::CBR_ENABLED, 0xFFFFFFFF);
	}

	m_sizeCalendar = m_arBars [0].CalcSize (TRUE);

	CBitmap bmp;
	//bmp.LoadBitmap (IDB_PAGES_SMALL_HC);

	m_Images.Create (16, 16, ILC_COLOR24 | ILC_MASK, 0, 0);
	m_Images.Add (&bmp, RGB (255, 0, 255));

	return 0;
}

BOOL CCalendarBar::OnEraseBkgnd(CDC* /*pDC*/) 
{
	return TRUE;
}

void CCalendarBar::OnSize(UINT nType, int cx, int cy) 
{
	CWnd::OnSize(nType, cx, cy);
	ReposBars ();
}

BOOL CCalendarBar::Create(const RECT& rect, CWnd* pParentWnd, UINT nID) 
{
	return CWnd::Create (NULL, _T(""), WS_CHILD | WS_VISIBLE, rect, pParentWnd, nID);
}

void CCalendarBar::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CRect rectClient;
	GetClientRect (rectClient);

	dc.FillRect (rectClient, &globalData.brWindow);

	if (rectClient.bottom - m_nMyCalendarsY > 0)
	{
		CRect rectMyCalendarsCaption = rectClient;
		rectMyCalendarsCaption.top = m_nMyCalendarsY;
		rectMyCalendarsCaption.bottom = rectMyCalendarsCaption.top +  
			globalData.GetTextHeight (TRUE) * 3 / 2;

		COLORREF clrText = CBCGPVisualManager::GetInstance ()->OnDrawControlBarCaption (
			&dc, NULL, FALSE, rectMyCalendarsCaption, 
			CRect (0, 0, 0, 0));

		CPen* pOldPen = dc.SelectObject (&globalData.penBarShadow);

		dc.MoveTo (rectMyCalendarsCaption.left - 1, rectMyCalendarsCaption.top);
		dc.LineTo (rectMyCalendarsCaption.right, rectMyCalendarsCaption.top);

		dc.SelectStockObject (BLACK_PEN);
		
		dc.MoveTo (rectMyCalendarsCaption.left - 1, rectMyCalendarsCaption.bottom);
		dc.LineTo (rectMyCalendarsCaption.right, rectMyCalendarsCaption.bottom);

		dc.SelectObject (pOldPen);

		CRect rectText = rectMyCalendarsCaption;
		rectText.DeflateRect (10, 0);

		dc.SetBkMode (TRANSPARENT);
		dc.SetTextColor (clrText);

		CFont* pOldFont = dc.SelectObject (&globalData.fontRegular);

		CString str = _T("My Calendars");
		dc.DrawText (str, rectText, DT_VCENTER | DT_LEFT | DT_SINGLELINE);

		CRect rectCalendar = rectClient;
		rectCalendar.top = rectMyCalendarsCaption.bottom + 5;
		rectCalendar.bottom = rectCalendar.top +  
			globalData.GetTextHeight (TRUE) * 3 / 2 - 5;

		dc.FillSolidRect (rectCalendar, RGB (255, 255, 213));

		rectCalendar.DeflateRect (20, 0);
		m_Images.Draw (&dc, 3, rectCalendar.TopLeft (), 0);

		rectCalendar.left += 20;

		str = _T("Calendar");
		
		dc.SetTextColor (globalData.clrHotText);
		dc.DrawText (str, rectCalendar, DT_VCENTER | DT_LEFT | DT_SINGLELINE);

		dc.SelectObject (pOldFont);
	}
}

void CCalendarBar::ReposBars ()
{
	if (GetSafeHwnd () == NULL)
	{
		return;
	}

	CRect rectClient;
	GetClientRect (rectClient);

	int cx = rectClient.Width ();
	int cy = rectClient.Height ();

	const int nMargin = 10;

	int nBarsInRow = min (3, max (1, (cx - nMargin) / (m_sizeCalendar.cx + nMargin)));
	int nBarsInCol = min (4, max (1, (cy - 30 - nMargin) / (m_sizeCalendar.cy + nMargin)));

	int iBar = 0;

	int dx = max (0, (cx - nBarsInRow * (m_sizeCalendar.cx + nMargin)) / 2);

	COleDateTime date = COleDateTime::GetCurrentTime ();

	for (int nRow = 0; nRow < nBarsInCol; nRow++)
	{
		int y = nMargin + nRow * (m_sizeCalendar.cy + nMargin);

		for (int nColumn = 0; nColumn < nBarsInRow; nColumn++)
		{
			int x = nMargin + dx + nColumn * (m_sizeCalendar.cx + nMargin);

			m_arBars [iBar].SetWindowPos (NULL,
				x, y, m_sizeCalendar.cx, m_sizeCalendar.cy,
				SWP_NOZORDER | SWP_NOACTIVATE);

			m_nMyCalendarsY = y + m_sizeCalendar.cy + 10;

			m_arBars [iBar].ShowWindow (SW_SHOWNOACTIVATE);

			m_arBars [iBar].SetDate (date);
			date += COleDateTimeSpan (31L, 0, 0, 0);

			iBar++;
		}
	}

	while (iBar < 12)
	{
		m_arBars [iBar++].ShowWindow (SW_HIDE);
	}

	m_nVisibleCalendars = nBarsInRow * nBarsInCol;
}

void CCalendarBar::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) 
{
	CWnd::OnSettingChange(uFlags, lpszSection);
	ReposBars ();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?