📄 optionsdlg.cpp
字号:
// OptionsDlg.cpp : implementation file
//
#include "stdafx.h"
#include "alarm.h"
#include "OptionsDlg.h"
#include "ClockChangeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COptionsDlg dialog
extern CAlarmApp *pAlarmApp;
COptionsDlg::COptionsDlg(CWnd* pParent /*=NULL*/)
: CDialog(COptionsDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(COptionsDlg)
m_bSetZOrder = pAlarmApp->m_bWindowIsTopmost;
m_iAlarmAM = 1;
m_bSpeakClock = pAlarmApp->m_bSpeakClock;
m_iStyle = pAlarmApp->m_iStyle;
m_bAlarmActive = pAlarmApp->m_bAlarmActive;
m_bGrayLetters = pAlarmApp->m_bGrayLetters;
m_iSpeakIntervals = pAlarmApp->m_iSpeakIntervals;
m_iSnap = pAlarmApp->m_iSnap;
//}}AFX_DATA_INIT
m_b12HourBase = pAlarmApp->m_b12HourBase;
m_iHoursRange = m_b12HourBase ? 0 : 1;
m_uiCurrentClock = 0;
SetAlarmTime();
}
void COptionsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COptionsDlg)
DDX_Check(pDX, IDC_CHECK_SETZORDER, m_bSetZOrder);
DDX_CBIndex(pDX, IDC_COMBO_ALARM, m_iAlarmAM);
DDX_Check(pDX, IDC_CHECK_SPEAKCLOCK, m_bSpeakClock);
DDX_CBIndex(pDX, IDC_COMBO_STYLES, m_iStyle);
DDX_Check(pDX, IDC_CHECK_ALARMACTIVE, m_bAlarmActive);
DDX_Check(pDX, IDC_CHECK_GRAYLETTERS, m_bGrayLetters);
DDX_CBIndex(pDX, IDC_COMBO_INTERVALS, m_iSpeakIntervals);
DDX_Radio(pDX, IDC_RADIO_RANGE1, m_iHoursRange);
DDX_Radio(pDX, IDC_RADIO_SNAP1, m_iSnap);
//}}AFX_DATA_MAP
DDX_CmEdit(pDX, IDC_EDIT_ALARM, m_EditAlarm, m_sAlarm);
}
BEGIN_MESSAGE_MAP(COptionsDlg, CDialog)
//{{AFX_MSG_MAP(COptionsDlg)
ON_BN_CLICKED(IDC_CHECK_SETZORDER, OnCheckSetzorder)
ON_BN_CLICKED(IDC_APPLY, OnApply)
ON_EN_CHANGE(IDC_EDIT_ALARM, OnChangeEditAlarm)
ON_BN_CLICKED(IDC_CHECK_SPEAKCLOCK, OnCheckSpeakclock)
ON_CBN_SELCHANGE(IDC_COMBO_ALARM, OnSelchangeComboAlarm)
ON_CBN_SELCHANGE(IDC_COMBO_STYLES, OnSelchangeComboStyles)
ON_BN_CLICKED(IDC_CHECK_ALARMACTIVE, OnCheckAlarmactive)
ON_BN_CLICKED(IDC_CHECK_GRAYLETTERS, OnCheckGrayletters)
ON_CBN_SELCHANGE(IDC_COMBO_INTERVALS, OnSelchangeComboIntervals)
ON_BN_CLICKED(IDC_BUTTON_CHANGETIME, OnButtonChangetime)
ON_WM_DESTROY()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_RADIO_RANGE1, OnRadioRange1)
ON_BN_CLICKED(IDC_RADIO_RANGE2, OnRadioRange2)
ON_BN_CLICKED(IDOK, OnOK)
ON_BN_CLICKED(IDC_RADIO_SNAP1, OnRadioSnap1)
ON_BN_CLICKED(IDC_RADIO_SNAP2, OnRadioSnap2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COptionsDlg message handlers
void COptionsDlg::OnOK()
{
if (OnApply())
CDialog::OnOK();
}
void COptionsDlg::OnCheckSetzorder()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnChangeEditAlarm()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnCheckSpeakclock()
{
UpdateData();
GetDlgItem(IDC_STATIC_INTERVALS)->EnableWindow(m_bSpeakClock);
GetDlgItem(IDC_COMBO_INTERVALS)->EnableWindow(m_bSpeakClock);
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnSelchangeComboAlarm()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnSelchangeComboStyles()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnSelchangeComboIntervals()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnCheckAlarmactive()
{
UpdateData();
GetDlgItem(IDC_STATIC_ALARM)->EnableWindow(m_bAlarmActive);
GetDlgItem(IDC_EDIT_ALARM)->EnableWindow(m_bAlarmActive);
if (m_b12HourBase)
GetDlgItem(IDC_COMBO_ALARM)->EnableWindow(m_bAlarmActive);
else
{
GetDlgItem(IDC_COMBO_ALARM)->EnableWindow(FALSE);
}
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnCheckGrayletters()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::HourRangeChange()
{
UpdateData();
if (m_b12HourBase)
{
if (m_bAlarmActive)
GetDlgItem(IDC_COMBO_ALARM)->EnableWindow(TRUE);
}
else
{
if (m_bAlarmActive)
GetDlgItem(IDC_COMBO_ALARM)->EnableWindow(FALSE);
}
ApplyWhat aw;
memset(&aw, 0, sizeof(aw));
if (m_b12HourBase != pAlarmApp->m_b12HourBase)
{
pAlarmApp->m_b12HourBase = m_b12HourBase;
aw.bHourBaseChange = TRUE;;
}
AfxGetMainWnd()->SendMessage(WM_USER_APPLY, (WPARAM) &aw);
AdjustAlarmTime();
UpdateData(FALSE);
}
void COptionsDlg::OnRadioRange1()
{
UpdateData(TRUE);
m_b12HourBase = (m_iHoursRange == 0) ? TRUE : FALSE;
HourRangeChange();
}
void COptionsDlg::OnRadioRange2()
{
UpdateData(TRUE);
m_b12HourBase = (m_iHoursRange == 0) ? TRUE : FALSE;
HourRangeChange();
}
BOOL COptionsDlg::OnApply()
{
CString sAlarm, sMessage = "";
int iAlarmHour=-1, iAlarmMin=-1;
ApplyWhat aw;
memset(&aw, 0, sizeof(aw));
UpdateData();
GetDlgItem(IDC_EDIT_ALARM)->GetWindowText(sAlarm);
sscanf(sAlarm.GetBuffer(80), "%d:%d", &iAlarmHour, &iAlarmMin);
sAlarm.ReleaseBuffer();
BOOL bAlarmAM = (m_iAlarmAM == 0) ? TRUE : FALSE; // Convert comboidx to boolean.
if (m_b12HourBase)
{
if ((iAlarmHour >= 1 && iAlarmHour <= 12) && (iAlarmMin >= 0 && iAlarmMin <= 59))
{
aw.bAlarmChange = TRUE;
}
else
{
if (iAlarmHour < 1 || iAlarmHour > 12)
{
sMessage = "Hour should be an integer between 1 and 12.";
}
if (iAlarmMin < 0 || iAlarmMin > 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 ((iAlarmHour >= 0 && iAlarmHour <= 23) && (iAlarmMin >= 0 && iAlarmMin <= 59))
{
aw.bAlarmChange = TRUE;
}
else
{
if (iAlarmHour < 0 || iAlarmHour > 23)
{
sMessage = "Hour should be an integer between 0 and 23.";
}
if (iAlarmMin < 0 || iAlarmMin > 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;
}
}
if (aw.bAlarmChange)
{
int iNewHour;
if (m_b12HourBase)
TimeAPto24(iAlarmHour, bAlarmAM, iNewHour);
else
iNewHour = iAlarmHour;
pAlarmApp->m_iAlarm24Hour = iNewHour;
pAlarmApp->m_iAlarmMinute = iAlarmMin;
}
if (m_iStyle != pAlarmApp->m_iStyle)
{
pAlarmApp->m_iStyle = m_iStyle;
aw.bStyleChange = TRUE;
}
if (m_bSpeakClock != pAlarmApp->m_bSpeakClock)
{
pAlarmApp->m_bSpeakClock = m_bSpeakClock;
}
if (m_bSetZOrder != pAlarmApp->m_bWindowIsTopmost)
{
pAlarmApp->m_bWindowIsTopmost = m_bSetZOrder;
aw.bZOrderChange = TRUE;
}
if (m_bAlarmActive != pAlarmApp->m_bAlarmActive)
{
pAlarmApp->m_bAlarmActive = m_bAlarmActive;
aw.bAlarmActiveChange = TRUE;
}
if (m_bGrayLetters != pAlarmApp->m_bGrayLetters)
{
pAlarmApp->m_bGrayLetters = m_bGrayLetters;
aw.bGrayChange = TRUE;
}
if (m_iSpeakIntervals != pAlarmApp->m_iSpeakIntervals)
{
pAlarmApp->m_iSpeakIntervals = m_iSpeakIntervals;
aw.bSpeakChange = TRUE;;
}
if (m_b12HourBase != pAlarmApp->m_b12HourBase)
{
pAlarmApp->m_b12HourBase = m_b12HourBase;
aw.bHourBaseChange = TRUE;;
}
pAlarmApp->m_iSnap = m_iSnap;
AfxGetMainWnd()->SendMessage(WM_USER_APPLY, (WPARAM) &aw);
GetDlgItem(IDC_APPLY)->EnableWindow(FALSE);
return TRUE;
}
BOOL COptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_EditAlarm.Init("[012][0-9]:[0-5][0-9]");
m_EditAlarm.SetData(m_sAlarm);
GetDlgItem(IDC_APPLY)->EnableWindow(FALSE); // Above data toggles Apply button.
GetDlgItem(IDC_STATIC_ALARM)->EnableWindow(m_bAlarmActive);
GetDlgItem(IDC_EDIT_ALARM)->EnableWindow(m_bAlarmActive);
GetDlgItem(IDC_COMBO_ALARM)->EnableWindow(m_bAlarmActive);
GetDlgItem(IDC_COMBO_INTERVALS)->EnableWindow(m_bGrayLetters);
GetDlgItem(IDC_STATIC_INTERVALS)->EnableWindow(m_bGrayLetters);
GetDlgItem(IDC_STATIC_INTERVALS)->EnableWindow(m_bSpeakClock);
GetDlgItem(IDC_COMBO_INTERVALS)->EnableWindow(m_bSpeakClock);
CRect rParent, rDlg;
GetParent()->GetWindowRect(&rParent);
GetWindowRect(&rDlg);
int x = rParent.Width() - rDlg.Width();
if (x > 0)
x /= 2;
if ((rDlg.Height() + rParent.bottom) < GetSystemMetrics(SM_CYSCREEN))
SetWindowPos(NULL, rParent.left+x, rParent.bottom, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
m_uiCurrentClock = SetTimer(3, 1000, NULL);
SetCurrentClock();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void COptionsDlg::OnButtonChangetime()
{
UpdateData();
CClockChangeDlg dlg(this);
dlg.DoModal();
}
void COptionsDlg::OnDestroy()
{
CDialog::OnDestroy();
if (m_uiCurrentClock)
KillTimer(m_uiCurrentClock);
}
void COptionsDlg::OnTimer(UINT nIDEvent)
{
if (nIDEvent == m_uiCurrentClock)
{
SetCurrentClock();
}
}
void COptionsDlg::SetCurrentClock()
{
int iCurrentHour, iCurrentMinute, iCurrentSecond;
BOOL bAM = TRUE;
CTime t = CTime::GetCurrentTime();
iCurrentMinute = t.GetMinute();
iCurrentSecond = t.GetSecond();
CString sCurrentClock;
if (m_b12HourBase)
{
Time24toAP(t.GetHour(), bAM, iCurrentHour);
sCurrentClock.Format("%02d:%02d.%02d %s", iCurrentHour, iCurrentMinute, iCurrentSecond, bAM ? "A&M" : "P&M");
}
else
{
sCurrentClock.Format("%02d:%02d.%02d", t.GetHour(), iCurrentMinute, iCurrentSecond);
}
GetDlgItem(IDC_BUTTON_CHANGETIME)->SetWindowText(sCurrentClock);
}
void COptionsDlg::SetAlarmTime()
{
int iAlarmHour = pAlarmApp->m_iAlarm24Hour;
BOOL bAM;
if (m_b12HourBase)
{
Time24toAP(pAlarmApp->m_iAlarm24Hour, bAM, iAlarmHour);
if (bAM)
m_iAlarmAM = 0;
else
m_iAlarmAM = 1;
}
m_sAlarm.Format("%02d%02d", iAlarmHour, pAlarmApp->m_iAlarmMinute);
}
void COptionsDlg::AdjustAlarmTime()
{
CString sAlarm;
int iAlarmHour=-1, iAlarmMin=-1, iNewHour;
GetDlgItem(IDC_EDIT_ALARM)->GetWindowText(sAlarm);
sscanf(sAlarm.GetBuffer(80), "%d:%d", &iAlarmHour, &iAlarmMin);
sAlarm.ReleaseBuffer();
if (! m_b12HourBase)
{
BOOL bAlarmAM = (m_iAlarmAM == 0) ? TRUE : FALSE; // Convert comboidx to boolean.
TimeAPto24(iAlarmHour, bAlarmAM, iNewHour);
iAlarmHour = iNewHour;
m_sAlarm.Format("%02d%02d", iAlarmHour, pAlarmApp->m_iAlarmMinute);
}
else
{
BOOL bAM;
Time24toAP(iAlarmHour, bAM, iNewHour);
iAlarmHour = iNewHour;
m_sAlarm.Format("%02d%02d", iAlarmHour, pAlarmApp->m_iAlarmMinute);
if (bAM)
m_iAlarmAM = 0;
else
m_iAlarmAM = 1;
}
}
void COptionsDlg::OnRadioSnap1()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
void COptionsDlg::OnRadioSnap2()
{
GetDlgItem(IDC_APPLY)->EnableWindow();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -