📄 clockchangedlg.cpp
字号:
// ClockChangeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "alarm.h"
#include "ClockChangeDlg.h"
#include "OptionsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClockChangeDlg dialog
extern CAlarmApp *pAlarmApp;
CClockChangeDlg::CClockChangeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CClockChangeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CClockChangeDlg)
m_iClockAM = 1;
//}}AFX_DATA_INIT
if (pParent != NULL)
m_b12HourBase = ((COptionsDlg *) pParent)->m_b12HourBase;
else
m_b12HourBase = pAlarmApp->m_b12HourBase;
int iClockHour;
BOOL bAM;
if (m_b12HourBase)
{
Time24toAP(pAlarmApp->m_iClock24Hour, bAM, iClockHour);
if (bAM)
m_iClockAM = 0;
else
m_iClockAM = 1;
m_sClock.Format("%02d%02d", iClockHour, pAlarmApp->m_iClockMinute);
}
else
{
m_sClock.Format("%02d%02d", pAlarmApp->m_iClock24Hour, pAlarmApp->m_iClockMinute);
}
}
void CClockChangeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClockChangeDlg)
DDX_CBIndex(pDX, IDC_COMBO_CLOCK, m_iClockAM);
//}}AFX_DATA_MAP
DDX_CmEdit(pDX, IDC_EDIT_CLOCK, m_EditClock, m_sClock);
}
BEGIN_MESSAGE_MAP(CClockChangeDlg, CDialog)
//{{AFX_MSG_MAP(CClockChangeDlg)
ON_BN_CLICKED(IDC_APPLYTIME, OnApply)
ON_EN_CHANGE(IDC_EDIT_CLOCK, OnChangeEditClock)
ON_CBN_SELCHANGE(IDC_COMBO_CLOCK, OnSelchangeComboClock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClockChangeDlg message handlers
void CClockChangeDlg::OnChangeEditClock()
{
GetDlgItem(IDC_APPLYTIME)->EnableWindow();
}
/*
This function validates the edited time string.
See AdjustTokenPrivileges for use in NT.
*/
BOOL CClockChangeDlg::OnApply()
{
CString sClock, sMessage;
int iClockHour=-1, iClockMin=-1;
UpdateData();
GetDlgItem(IDC_EDIT_CLOCK)->GetWindowText(sClock);
sscanf(sClock.GetBuffer(80), "%d:%d", &iClockHour, &iClockMin);
sClock.ReleaseBuffer();
BOOL bClockAM = (m_iClockAM == 0) ? TRUE : FALSE; // Convert comboidx to boolean.
if (m_b12HourBase)
{
if ((iClockHour >= 1 && iClockHour <= 12) && (iClockMin >= 0 && iClockMin <= 59))
{
int iNewHour;
TimeAPto24(iClockHour, bClockAM, iNewHour);
SYSTEMTIME st;
GetLocalTime(&st); // var GetSystemTime
st.wHour = iNewHour;
st.wMinute = iClockMin;
st.wSecond = 0;
SetLocalTime(&st);
::SendMessage(HWND_TOPMOST, WM_TIMECHANGE, 0, 0);
}
else
{
if (iClockHour < 1 || iClockHour > 12)
{
sMessage = "Hour should be an integer between 1 and 12.";
}
if (iClockMin < 0 || iClockMin > 59)
{
if (sMessage.GetLength() == 0)
{
sMessage = "Minute should be an integer between 0 and 59";
}
else
sMessage += CString("\nMinute should be an integer between 0 and 59");
}
MessageBox(sMessage, AfxGetAppName());
return FALSE;
}
}
else
{
if ((iClockHour >= 0 && iClockHour <= 23) && (iClockMin >= 0 && iClockMin <= 59))
{
SYSTEMTIME st;
GetLocalTime(&st);
st.wHour = iClockHour;
st.wMinute = iClockMin;
st.wSecond = 0;
SetLocalTime(&st);
::SendMessage(HWND_TOPMOST, WM_TIMECHANGE, 0, 0);
}
else
{
if (iClockHour < 0 || iClockHour > 23)
{
sMessage = "Hour should be an integer between 0 and 23.";
}
if (iClockMin < 0 || iClockMin > 59)
{
if (sMessage.GetLength() == 0)
{
sMessage = "Minute should be an integer between 0 and 59";
}
else
sMessage += CString("\nMinute should be an integer between 0 and 59");
}
MessageBox(sMessage, AfxGetAppName());
return FALSE;
}
}
GetDlgItem(IDC_APPLYTIME)->EnableWindow(FALSE);
return TRUE;
}
BOOL CClockChangeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_EditClock.Init("[012][0-9]:[0-5][0-9]");
m_EditClock.SetData(m_sClock);
GetDlgItem(IDC_APPLYTIME)->EnableWindow(FALSE); // Above data toggles Apply button.
CRect rParent, rDlg;
GetParent()->GetWindowRect(&rParent);
GetWindowRect(&rDlg);
if (! m_b12HourBase)
GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(FALSE);
else
GetDlgItem(IDC_COMBO_CLOCK)->EnableWindow(TRUE);
if ((rDlg.Height() + rParent.bottom) < GetSystemMetrics(SM_CYSCREEN))
SetWindowPos(NULL, rParent.left, rParent.bottom, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CClockChangeDlg::OnOK()
{
if (OnApply())
CDialog::OnOK();
}
void CClockChangeDlg::OnSelchangeComboClock()
{
GetDlgItem(IDC_APPLYTIME)->EnableWindow();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -