gps/GPSProject/GPSMain/SetDateDlg.cpp

328 lines
7.5 KiB
C++
Executable File

// SetDateDlg.cpp : implementation file
//
#include "stdafx.h"
#include "gpsmain.h"
#include "SetDateDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSetDateDlg dialog
CSetDateDlg::CSetDateDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSetDateDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSetDateDlg)
//}}AFX_DATA_INIT
// 初始化背景画刷
CBitmap tmpBmp;
// 从资源中加载背景图片
tmpBmp.LoadBitmap(IDB_DATESET_WND);
// 建立背景画刷
m_BgDC.CreateCompatibleDC(NULL);
m_BgDC.SelectObject(&tmpBmp);
tmpBmp.DeleteObject();
// 18x18 粗体
m_titleFont.CreateFont(18,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
m_txtFont.CreateFont(18,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
// 绘制日期日期
SYSTEMTIME dt;
// 获取本地日期和时间
GetLocalTime(&dt);
m_Year = dt.wYear;
m_Month = dt.wMonth;
m_Day = dt.wDay;
}
CSetDateDlg::~CSetDateDlg()
{
m_BgDC.DeleteDC();
m_txtFont.DeleteObject();
m_titleFont.DeleteObject();
}
void CSetDateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSetDateDlg)
DDX_Control(pDX, IDC_BUTTON_SETDATE_YEARDEC, m_butDecYear);
DDX_Control(pDX, IDC_BUTTON_SETDATE_MONTHDEC, m_butDecMonth);
DDX_Control(pDX, IDC_BUTTON_SETDATE_DAYDEC, m_butDecDay);
DDX_Control(pDX, IDC_BUTTON_SETDATE_MONTHADD, m_butAddMonth);
DDX_Control(pDX, IDC_BUTTON_SETDATE_DAYADD, m_butAddDay);
DDX_Control(pDX, IDC_BUTTON_SETDATE_ADDYEAR, m_butAddYear);
DDX_Control(pDX, IDC_BUTTON_SETDATEEXIT, m_butExit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSetDateDlg, CDialog)
//{{AFX_MSG_MAP(CSetDateDlg)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON_SETDATE_ADDYEAR, OnButtonSetdateAddyear)
ON_BN_CLICKED(IDC_BUTTON_SETDATE_DAYADD, OnButtonSetdateDayadd)
ON_BN_CLICKED(IDC_BUTTON_SETDATE_DAYDEC, OnButtonSetdateDaydec)
ON_BN_CLICKED(IDC_BUTTON_SETDATE_MONTHADD, OnButtonSetdateMonthadd)
ON_BN_CLICKED(IDC_BUTTON_SETDATE_MONTHDEC, OnButtonSetdateMonthdec)
ON_BN_CLICKED(IDC_BUTTON_SETDATE_YEARDEC, OnButtonSetdateYeardec)
ON_BN_CLICKED(IDC_BUTTON_SETDATEEXIT, OnButtonSetdateexit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSetDateDlg message handlers
BOOL CSetDateDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return FALSE;
//return CDialog::OnEraseBkgnd(pDC);
}
void CSetDateDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// TODO: Add your message handler code here
dc.BitBlt(0,0,320,240,&m_BgDC,0,0,SRCCOPY);
dc.SelectObject(&m_titleFont);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,255));
WCHAR strRes[MAX_PATH];
CString(LoadString(theApp.GetResourceLib(),IDS_SETDATE_TITLE,strRes,MAX_PATH));
dc.DrawText(strRes,CRect(0,4,320,32),DT_CENTER|DT_VCENTER);
dc.SelectObject(&m_txtFont);
dc.SetTextColor(RGB(0,0,0));
CString(LoadString(theApp.GetResourceLib(),IDS_SETDATE_YEAR,strRes,MAX_PATH));
dc.DrawText(strRes,CRect(0,52,320,70),DT_VCENTER|DT_CENTER);
CString(LoadString(theApp.GetResourceLib(),IDS_SETDATE_MONTH,strRes,MAX_PATH));
dc.DrawText(strRes,CRect(0,104,320,121),DT_VCENTER|DT_CENTER);
CString(LoadString(theApp.GetResourceLib(),IDS_SETDATE_DAY,strRes,MAX_PATH));
dc.DrawText(strRes,CRect(0,154,320,172),DT_VCENTER|DT_CENTER);
dc.SetTextColor(RGB(255,255,255));
CString str;
str.Format(L"%d",m_Year);
dc.DrawText(str,CRect(71,73,248,102),DT_VCENTER|DT_CENTER);
str.Format(L"%d",m_Month);
dc.DrawText(str,CRect(71,123,248,151),DT_VCENTER|DT_CENTER);
str.Format(L"%d",m_Day);
dc.DrawText(str,CRect(71,174,248,203),DT_VCENTER|DT_CENTER);
// Do not call CDialog::OnPaint() for painting messages
}
BOOL CSetDateDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CenterWindow(this); // center to the hpc screen
// TODO: Add extra initialization here
// 设置窗口大小
MoveWindow(0,0,320,240);
m_butExit.MoveWindow(282,6,25,25);
m_butExit.LoadBitmaps(IDB_SETVOLUME_CLOSE,IDB_SETVOLUME_CLOSED);
m_butDecYear.MoveWindow(22,64,48,48);
m_butDecYear.LoadBitmaps(IDB_DATESET_YEARDEC,IDB_DATESET_YEARDECD);
m_butDecMonth.MoveWindow(22,114,48,48);
m_butDecMonth.LoadBitmaps(IDB_DATESET_MONTHDEC,IDB_DATESET_MONTHDECD);
m_butDecDay.MoveWindow(22,166,48,48);
m_butDecDay.LoadBitmaps(IDB_DATESET_DAYDEC,IDB_DATESET_DAYDECD);
m_butAddYear.MoveWindow(250,64,48,48);
m_butAddYear.LoadBitmaps(IDB_DATESET_YEARADD,IDB_DATESET_YEARADDD);
m_butAddMonth.MoveWindow(250,114,48,48);
m_butAddMonth.LoadBitmaps(IDB_DATESET_MONTHADD,IDB_DATESET_MONTHADDD);
m_butAddDay.MoveWindow(250,166,48,48);
m_butAddDay.LoadBitmaps(IDB_DATESET_DAYADD,IDB_DATESET_DAYADDD);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSetDateDlg::OnButtonSetdateAddyear()
{
// TODO: Add your control notification handler code here
if (m_Year < 2099)
{
m_Year++;
}
else
{
m_Year = 2000;
}
InvalidateRect(CRect(71,73,248,102));
}
void CSetDateDlg::OnButtonSetdateDayadd()
{
// TODO: Add your control notification handler code here
if (m_Day < GetDays(m_Year,m_Month))
{
m_Day++;
}
else
{
m_Day = 1;
}
InvalidateRect(CRect(71,174,248,203));
}
void CSetDateDlg::OnButtonSetdateDaydec()
{
// TODO: Add your control notification handler code here
if (m_Day > 1)
{
m_Day--;
}
else
{
m_Day = GetDays(m_Year,m_Month);
}
InvalidateRect(CRect(71,174,248,203));
}
void CSetDateDlg::OnButtonSetdateMonthadd()
{
// TODO: Add your control notification handler code here
if (m_Month < 12)
{
m_Month++;
}
else
{
m_Month = 1;
}
InvalidateRect(CRect(71,123,248,151));
}
void CSetDateDlg::OnButtonSetdateMonthdec()
{
// TODO: Add your control notification handler code here
if(m_Month > 1)
{
m_Month--;
}
else
{
m_Month = 12;
}
InvalidateRect(CRect(71,123,248,151));
}
void CSetDateDlg::OnButtonSetdateYeardec()
{
// TODO: Add your control notification handler code here
if (m_Year > 2000)
{
m_Year--;
}
else
{
m_Year = 2099;
}
InvalidateRect(CRect(71,73,248,102));
}
void CSetDateDlg::OnButtonSetdateexit()
{
// TODO: Add your control notification handler code here
SYSTEMTIME dt;
GetLocalTime(&dt);
dt.wDay = m_Day;
dt.wMonth = m_Month;
dt.wYear = m_Year;
SetLocalTime(&dt);
EndDialog(IDOK);
}
int CSetDateDlg::GetDays(int iYear, int iMonth)
{
if (iMonth == 1 || iMonth == 3 || iMonth == 5 || iMonth ==7
|| iMonth == 8 || iMonth == 10 || iMonth == 12)
{
// 大月31天
return 31;
}
else
{
// 是否是二月
if (iMonth == 2)
{
// 闰年2月29天
if (IsLoopYear(iYear))
{
return 29;
}
else
{
// 不是闰年2月28天
return 28;
}
}
else
{
// 小月30天
return 30;
}
}
}
bool CSetDateDlg::IsLoopYear(int iYear)
{
if ((iYear % 4) == 0
&& (iYear % 100) != 0
|| (iYear % 400 == 0))
{
return true;
}
else
{
return false;
}
}