⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clockchangedlg.cpp

📁 一个很漂亮的数字时钟程序,你一定会喜欢的.
💻 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 + -