📄 datedlg.cpp
字号:
// Written by JHCC, 1997
// DateDlg.cpp : implementation file
//
#include "stdafx.h"
#include "JHHB.h"
#include "DateDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString CDateDlg::m_aStrMonthName[] =
{
_T("一月"),
_T("二月"),
_T("三月"),
_T("四月"),
_T("五月"),
_T("六月"),
_T("七月"),
_T("八月"),
_T("九月"),
_T("十月"),
_T("十一月"),
_T("十二月"),
};
/////////////////////////////////////////////////////////////////////////////
// CDateDlg dialog
CDateDlg::CDateDlg(CTime* pTime /*=NULL*/, CWnd* pParent /*=NULL*/)
: CDialog(CDateDlg::IDD, pParent)
{
if (pTime == NULL)
{
COleDateTime time = COleDateTime::GetCurrentTime();
m_time.SetDate(time.GetYear(), time.GetMonth(), time.GetDay()); // clear time
}
else
m_time.SetDate(pTime->GetYear(), pTime->GetMonth(), pTime->GetDay());
//{{AFX_DATA_INIT(CDateDlg)
//}}AFX_DATA_INIT
}
void CDateDlg::ShowDate(void)
{
CString strDate;
strDate.Format(_T("%d年%d月"), m_time.GetYear(), m_time.GetMonth());
m_showDateWnd.SetWindowText(strDate);
m_dateGridWnd.RedrawWindow();
}
COleDateTime CDateDlg::GetDate()
{
return m_time;
}
void CDateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDateDlg)
DDX_Control(pDX, IDC_SHOWOTHERMONTHDAY, m_showOtherMonthDayButton);
DDX_Control(pDX, IDC_SHOWDATE, m_showDateWnd);
DDX_Control(pDX, IDC_YEAR, m_yearBox);
DDX_Control(pDX, IDC_MONTH, m_monthBox);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDateDlg, CDialog)
//{{AFX_MSG_MAP(CDateDlg)
ON_CBN_SELENDOK(IDC_MONTH, OnSeleMonth)
ON_CBN_SELENDOK(IDC_YEAR, OnSeleYear)
ON_BN_CLICKED(IDC_SHOWOTHERMONTHDAY, OnShowOtherMonthDay)
ON_BN_CLICKED(IDC_DATEGRID, OnDategrid)
//}}AFX_MSG_MAP
ON_MESSAGE(WMDATE_CHANGEDATE, OnChangeDate)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDateDlg message handlers
void CDateDlg::OnSeleMonth()
{
m_dateGridWnd.AdjustDate(m_monthBox.GetCurSel() + 1, FALSE, CDayGridWnd::ADJUST_MONTH_ABS);
m_dateGridWnd.CalcFirstDayOfMonth();
ShowDate();
}
void CDateDlg::OnSeleYear()
{
m_dateGridWnd.AdjustDate(m_yearBox.GetCurSel() + YEAR_START, FALSE, CDayGridWnd::ADJUST_YEAR_ABS);
m_dateGridWnd.CalcFirstDayOfMonth();
ShowDate();
}
BOOL CDateDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_yearBox.ResetContent();
for (int i = YEAR_START; i < YEAR_END; ++ i)
{
CString strYear;
strYear.Format("%d", i);
m_yearBox.AddString(strYear);
}
m_yearBox.SetCurSel(m_time.GetYear() - YEAR_START);
m_monthBox.ResetContent();
for (i = 0; i < sizeof(m_aStrMonthName) / sizeof(m_aStrMonthName[0]); ++ i)
{
m_monthBox.AddString(m_aStrMonthName[i]);
}
m_monthBox.SetCurSel(m_time.GetMonth() - 1);
CRect rtBounds;
m_showDateWnd.GetClientRect(&rtBounds);
LOGFONT logFont;
::memset(&logFont, 0, sizeof(logFont));
logFont.lfHeight = rtBounds.Height();
logFont.lfWidth = rtBounds.Width() / 10;
logFont.lfCharSet = OEM_CHARSET;
logFont.lfWeight = 600;
logFont.lfItalic = TRUE;
CString szFont = "楷体_GB2312";
::lstrcpy(logFont.lfFaceName, szFont);
VERIFY(m_font.CreateFontIndirect(&logFont));
m_showDateWnd.SetFont(&m_font);
GetDlgItem(IDC_DATEGRID)->GetWindowRect(&rtBounds);
GetDlgItem(IDC_DATEGRID)->DestroyWindow();
ScreenToClient(&rtBounds);
m_dateGridWnd.CreateEx(WS_EX_CLIENTEDGE, NULL, NULL, WS_CHILD | WS_VISIBLE,
rtBounds.left, rtBounds.top,
rtBounds.Width(), rtBounds.Height(),
this->GetSafeHwnd(), (HMENU)IDC_DATEGRID);
m_dateGridWnd.InitDayGrid(&m_time);
ShowDate();
m_dateGridWnd.SetFocus();
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
LRESULT CDateDlg::OnChangeDate(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case CM_CHANGEYEAR:
m_yearBox.SetCurSel(lParam - YEAR_START);
m_dateGridWnd.CalcFirstDayOfMonth();
ShowDate();
break;
case CM_CHANGEMONTH:
m_monthBox.SetCurSel(lParam - 1);
m_dateGridWnd.CalcFirstDayOfMonth();
ShowDate();
break;
}
return (LRESULT)0;
}
void CDateDlg::OnShowOtherMonthDay()
{
m_dateGridWnd.SetShowOtherMonthDay(m_showOtherMonthDayButton.GetCheck());
m_dateGridWnd.RedrawWindow();
}
void CDateDlg::OnDategrid()
{
// TODO: Add your control notification handler code here
}
void CDateDlg::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
}
void CDateDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -