📄 datetimepickerdlg.cpp
字号:
// DateTimePickerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Controls.h"
#include "DateTimePickerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define TIMEFORMAT _T("hh':'mm':'ss''ddd MMM dd','yyy")
/////////////////////////////////////////////////////////////////////////////
// CDateTimePickerDlg property page
IMPLEMENT_DYNCREATE(CDateTimePickerDlg, CPropertyPage)
CDateTimePickerDlg::CDateTimePickerDlg() : CPropertyPage(CDateTimePickerDlg::IDD)
{
//{{AFX_DATA_INIT(CDateTimePickerDlg)
m_bRightAlign = FALSE;
m_bShowNone = FALSE;
m_bSpinner = FALSE;
m_timeDTPicker = 0;
m_nDateFormat = 0;
m_nDateOrTime = 0;
//}}AFX_DATA_INIT
m_psp.dwFlags &= ~PSP_HASHELP;
}
CDateTimePickerDlg::~CDateTimePickerDlg()
{
}
void CDateTimePickerDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDateTimePickerDlg)
DDX_Control(pDX, IDC_DATETIME_DTPICKER, m_ctlDTPicker);
DDX_Check(pDX, IDC_DATETIME_RIGHTALIGN, m_bRightAlign);
DDX_Check(pDX, IDC_DATETIME_SHOWNONE, m_bShowNone);
DDX_Check(pDX, IDC_DATETIME_SPINNER, m_bSpinner);
DDX_DateTimeCtrl(pDX, IDC_DATETIME_DTPICKER, m_timeDTPicker);
DDX_Radio(pDX, IDC_DATETIME_SHORTDATE, m_nDateFormat);
DDX_Radio(pDX, IDC_DATETIME_SHOWDATE, m_nDateOrTime);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDateTimePickerDlg, CPropertyPage)
//{{AFX_MSG_MAP(CDateTimePickerDlg)
ON_BN_CLICKED(IDC_DATETIME_RIGHTALIGN, OnDatetimeRightalign)
ON_BN_CLICKED(IDC_DATETIME_SHOWNONE, OnDatetimeShownone)
ON_BN_CLICKED(IDC_DATETIME_SHORTDATE, OnDateFormat)
ON_BN_CLICKED(IDC_DATETIME_SHOWDATE, OnDateOrTime)
ON_BN_CLICKED(IDC_DATETIME_SPINNER, OnDatetimeSpinner)
ON_BN_CLICKED(IDC_DATETIME_LONGDATE, OnDateFormat)
ON_BN_CLICKED(IDC_DATETIME_SHOWTIME, OnDateOrTime)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDateTimePickerDlg message handlers
BOOL CDateTimePickerDlg::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// m_ctlDTPicker.ModifyStyle (0, DTS_APPCANPARSE, TRUE);
m_dwStyle = m_ctlDTPicker.GetStyle ();
m_timeDTPicker = CTime::GetCurrentTime ();
m_ctlDTPicker.GetWindowRect (m_rcWide);
ScreenToClient (m_rcWide);
m_rcNarrow = m_rcWide;
m_rcWide.left -= m_rcWide.Width();
// m_ctlDTPicker.SetFormat (TIMEFORMAT);
UpdateData (FALSE);
return TRUE;
}
void CDateTimePickerDlg::OnDatetimeRightalign()
{
UpdateData (TRUE);
if (m_bRightAlign)
{
m_ctlDTPicker.ModifyStyle (0, DTS_RIGHTALIGN, TRUE);
m_dwStyle |= DTS_RIGHTALIGN;
}
else
{
m_ctlDTPicker.ModifyStyle (DTS_RIGHTALIGN, 0, TRUE);
m_dwStyle &= ~DTS_RIGHTALIGN;
}
}
void CDateTimePickerDlg::OnDatetimeShownone()
{
UpdateData (TRUE);
if (m_bShowNone)
{
m_dwStyle |= DTS_SHOWNONE;
m_ctlDTPicker.ModifyStyle (0, DTS_SHOWNONE, TRUE);
}
else
{
m_dwStyle &= ~DTS_SHOWNONE;
m_ctlDTPicker.ModifyStyle (DTS_SHOWNONE, 0, TRUE);
}
RecreateControl ();
}
void CDateTimePickerDlg::OnDateFormat()
{
UpdateData (TRUE);
switch (m_nDateFormat)
{
case 0: // Short time
m_dwStyle &= ~DTS_LONGDATEFORMAT;
m_dwStyle |= DTS_SHORTDATEFORMAT;
RecreateControl (2);
break;
case 1:
m_dwStyle |= DTS_LONGDATEFORMAT;
m_dwStyle &= ~DTS_SHORTDATEFORMAT;
RecreateControl (1);
break;
default:
return;
}
m_timeDTPicker = CTime::GetCurrentTime ();
UpdateData (FALSE);
}
void CDateTimePickerDlg::OnDateOrTime()
{
UpdateData (TRUE);
CWnd *shortDate = GetDlgItem (IDC_DATETIME_SHORTDATE);
CWnd *longDate = GetDlgItem (IDC_DATETIME_LONGDATE);
switch (m_nDateOrTime)
{
case 0: // Short time
m_dwStyle &= ~DTS_TIMEFORMAT;
m_ctlDTPicker.ModifyStyle (DTS_TIMEFORMAT, 0, TRUE);
RecreateControl (m_nDateFormat ? 1 : 2);
shortDate->EnableWindow (TRUE);
longDate->EnableWindow (TRUE);
m_bSpinner = FALSE;
break;
case 1:
m_dwStyle |= DTS_TIMEFORMAT;
m_ctlDTPicker.ModifyStyle (0, DTS_TIMEFORMAT, TRUE);
RecreateControl (2);
shortDate->EnableWindow (FALSE);
longDate->EnableWindow (FALSE);
m_bSpinner = TRUE;
m_ctlDTPicker.SetFormat ("");
break;
default:
return;
}
m_timeDTPicker = CTime::GetCurrentTime ();
UpdateData (FALSE);
}
void CDateTimePickerDlg::OnDatetimeSpinner()
{
UpdateData (TRUE);
if (m_bSpinner)
m_dwStyle |= DTS_UPDOWN;
else
m_dwStyle &= ~DTS_UPDOWN;
RecreateControl ();
}
void CDateTimePickerDlg::RecreateControl(int nSize)
{
CRect rc;
switch (nSize)
{
case 0: // S'alright. Do nothing
m_ctlDTPicker.GetWindowRect (rc);
ScreenToClient (rc);
break;
case 1: // Size for long date
rc = m_rcWide;
break;
case 2: // Size for short date
rc = m_rcNarrow;
break;
}
CFont *font = GetFont ();
m_ctlDTPicker.DestroyWindow ();
m_ctlDTPicker.Create (m_dwStyle, rc, this, IDC_DATETIME_DTPICKER);
m_ctlDTPicker.SetFont (font);
m_ctlDTPicker.SetFormat (TIMEFORMAT);
}
BOOL CDateTimePickerDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
NMHDR *pNMHDR = (NMHDR *) lParam;
if (pNMHDR->idFrom == IDC_DATETIME_DTPICKER)
{
NMDATETIMESTRING *nmDT = (NMDATETIMESTRING *) pNMHDR;
if (nmDT->nmhdr.code == DTN_USERSTRING)
{
// Handle the string parsing here
return (TRUE);
}
}
return CPropertyPage::OnNotify(wParam, lParam, pResult);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -