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 + -
显示快捷键?