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

📄 s200807003_alarmclockdlg.cpp

📁 基于WinCE4.2的evc开发的闹钟提醒系统.有日历等相应的功能.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// S200807003_AlarmClockDlg.cpp : implementation file
//

#include "stdafx.h"
#include "S200807003_AlarmClock.h"
#include "S200807003_AlarmClockDlg.h"

#include "Alarm.h"	//add by xiewei
#include  <atlconv.h> //add by xiewei for CString to char *

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CS200807003_AlarmClockDlg dialog

CS200807003_AlarmClockDlg::CS200807003_AlarmClockDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CS200807003_AlarmClockDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CS200807003_AlarmClockDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CS200807003_AlarmClockDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CS200807003_AlarmClockDlg)
	DDX_Control(pDX, IDC_EDIT_TEXT, m_edit_text);
	DDX_Control(pDX, IDC_CHECK_EVERY, m_is_everyday);
	DDX_Control(pDX, IDC_LIST_SCHE, m_schedule_list);
	DDX_Control(pDX, IDC_DATETIMEPICKER_SCHE, m_schedule_time);
	DDX_Control(pDX, IDC_DATETIMEPICKER_CUR, m_current_time);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CS200807003_AlarmClockDlg, CDialog)
	//{{AFX_MSG_MAP(CS200807003_AlarmClockDlg)
	ON_BN_CLICKED(IDC_BUTTON_UPDATE, OnButtonUpdate)
	ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)
	ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
	ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
	ON_BN_CLICKED(IDC_BUTTON_DELALL, OnButtonDelall)
	ON_BN_CLICKED(IDC_CHECK_EVERY, OnCheckEvery)
	ON_NOTIFY(NM_SETFOCUS, IDC_DATETIMEPICKER_CUR, OnSetfocusDatetimepickerCur)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CS200807003_AlarmClockDlg message handlers

BOOL CS200807003_AlarmClockDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	// 把显示时间设置为日期时间都显示的格式
	m_current_time.SetFormat(L"yyyy-MM-dd HH:mm:ss");
	m_schedule_time.SetFormat(L"yyyy-MM-dd HH:mm:ss");
	// 创建实时时间刷新的线程
	m_hThreadOne = CreateThread(NULL, 100, ThreadFunOne, (void *)this, 0, NULL);
	SetThreadPriority(m_hThreadOne, THREAD_PRIORITY_NORMAL);

	// 设置列表的风格
	m_schedule_list.SetExtendedStyle(
		LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|
		LVS_EX_HEADERDRAGDROP);
	// 设置表头
	m_schedule_list.InsertColumn(0,L"Index",LVCFMT_LEFT,50,0);
	m_schedule_list.InsertColumn(1,L"Type",LVCFMT_LEFT,70,1);
	m_schedule_list.InsertColumn(2,L"Time",LVCFMT_LEFT,150,2);

	// 初始化记录文件
	FILE *fptr; 
	int index,count;
	CString index_text;
	Alarm *tmp;
	POSITION pos;
	COleDateTime get_c_cur_time, get_c_list_time;

	AlarmSet = new CObList();	//先建一个空表
	if( (fptr = fopen("alarm_data.ini","r")) == NULL)
		MessageBox(L"No existent record file");
	else {
		fclose(fptr);
		// 从文件中读取记录到AlarmSet表里
		File2AlarmSet();

		// 从AlarmSet表里把过期的记录删除
		pos = AlarmSet->GetHeadPosition();
		get_c_cur_time = COleDateTime::GetCurrentTime();
		count = 0;
		while(pos) {
			tmp = (Alarm *)AlarmSet->GetNext(pos);
			if(!tmp->get_is_everyday()) {
				get_c_list_time.SetDateTime(
					(short)_ttoi(tmp->get_datetime().Mid(0, 4)),
					(short)_ttoi(tmp->get_datetime().Mid(5, 2)),
					(short)_ttoi(tmp->get_datetime().Mid(8, 2)),
					(short)_ttoi(tmp->get_datetime().Mid(11, 2)),
					(short)_ttoi(tmp->get_datetime().Mid(14, 2)),
					(short)_ttoi(tmp->get_datetime().Mid(17, 2)));
				if(get_c_cur_time > get_c_list_time)	//在AlarmSet里删除过期的记录
					AlarmSet->RemoveAt(AlarmSet->Find(tmp));
			}
			count++;
		}

		// 从AlarmSet表里把记录添加到列表框里
		index = m_schedule_list.GetItemCount();	// 得到当前列表中的记录数
		pos = AlarmSet->GetHeadPosition();
		while(pos) {
			index_text.Format(L"%d", index);
			tmp = (Alarm *)AlarmSet->GetNext(pos);
			m_schedule_list.InsertItem(index,index_text);	// 插入新记录
			if(tmp->get_is_everyday())	// 判定是每日闹铃还是一次闹铃
				m_schedule_list.SetItemText(index, 1, L"EveryDay");
			else
				m_schedule_list.SetItemText(index, 1, L"Once");
			m_schedule_list.SetItemText(index, 2, tmp->get_datetime());
			index++;
		}
	}
	// 创建闹铃列表检测的线程
	m_hThreadTwo = CreateThread(NULL, 100, ThreadFunTwo, (void *)this, 0, NULL);
	SetThreadPriority(m_hThreadTwo, THREAD_PRIORITY_NORMAL);
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CS200807003_AlarmClockDlg::OnButtonUpdate() 
{
	// TODO: Add your control notification handler code here
	COleDateTime get_c_cur_time;
	SYSTEMTIME tm;

	// 获取对话框中设置的时间
	m_current_time.GetTime(get_c_cur_time);

	// 截取对话框中所设置的时间存入SYSTEMTIME的结构中
	tm.wYear = get_c_cur_time.GetYear();
	tm.wMonth = get_c_cur_time.GetMonth();
	tm.wDay = get_c_cur_time.GetDay();
	tm.wHour = get_c_cur_time.GetHour();	
	tm.wMinute = get_c_cur_time.GetMinute();
	tm.wSecond = get_c_cur_time.GetSecond();
	tm.wMilliseconds = 0;

	if(SetLocalTime(&tm) == 0) MessageBox(L"SetLocalTime Failed");
	else MessageBox(L"SetLocalTime Success");

	ResumeThread(m_hThreadOne);
}

void CS200807003_AlarmClockDlg::OnButtonSet() 
{
	// TODO: Add your control notification handler code here
	COleDateTime get_c_cur_time, get_c_sche_time;
	CString time_text, check_result;
	bool valid_time = true;
	
	CString index_text;
	int index;

	Alarm *add_alarm;
	CString get_edit_text;

	// 获取设置的时间,COleDateTime型的用来和当前时间比较
	// CString型的用来检测是否在记录文件中的有冲突
	m_schedule_time.GetWindowText(time_text);	
	m_schedule_time.GetTime(get_c_sche_time);

	// 判断一次闹铃时间是否小于当前系统时间
	if(m_is_everyday.GetCheck() == 0) {	// 一次闹铃
		get_c_cur_time = COleDateTime::GetCurrentTime();
		if(get_c_sche_time < get_c_cur_time) {
			valid_time = false;
			check_result = "Sorry, the time you set is earlier than now time.";
		}
	}
	
	// 判断设置的时间在记录文件中是否重复
	if(is_conflict(time_text)) {
		valid_time = false;
		check_result = "Sorry, there has been a reminder at this time.";
	}

	//判断设置的时间所属类型的记录已经达到5个
	if(is_overcount()) {
		valid_time = false;
		if(m_is_everyday.GetCheck() == 1)
			check_result = "Sorry,every user has 5 everyday-reminder at most.";
		else
			check_result = "Sorry,every user has 5 once-reminder at most.";
	}

	// 新的记录加入AlarmSet
	if(valid_time == true) {
		m_edit_text.GetWindowText(get_edit_text);
		if(m_is_everyday.GetCheck() == 1)	// 判定是每日闹铃还是一次闹铃
			add_alarm = new Alarm(true, time_text, get_edit_text);
		else
			add_alarm = new Alarm(false, time_text, get_edit_text);
		AlarmSet->AddTail(add_alarm);
	}

	// 新的记录加入列表框
	if(valid_time == true) {
		index = m_schedule_list.GetItemCount();	// 得到当前列表中的记录数
		index_text.Format(L"%d", index);
		m_schedule_list.InsertItem(index,index_text);	// 插入新记录
		if(m_is_everyday.GetCheck() == 1)
			m_schedule_list.SetItemText(index, 1, L"EveryDay");
		else
			m_schedule_list.SetItemText(index, 1, L"Once");
		m_schedule_list.SetItemText(index, 2, time_text);
	}
	else
		MessageBox(check_result);
}

void CS200807003_AlarmClockDlg::OnButtonExit() 
{
	// TODO: Add your control notification handler code here
	// 从AlarmSet中读取闹铃记录写入文件里
	int index = 1;
	POSITION pos;
	Alarm *tmp;
	FILE *fptr;
	CString get_s_text, get_s_datetime, write_tmp;
	char *lpsz;

	if( (fptr = fopen("alarm_data.ini","w")) != NULL) {
		fputs("[RemindOnceInfo]\n", fptr);	//先写入一次闹铃的记录
		pos = AlarmSet->GetHeadPosition();
		while(pos) {
			tmp = (Alarm *)AlarmSet->GetNext(pos);
			if(!(tmp->get_is_everyday())) {	// 是一次闹铃
				get_s_text = tmp->get_text();
				get_s_datetime = tmp->get_datetime();
				write_tmp.Format(L"task%d=%s\n", index, get_s_text);

				USES_CONVERSION; 
				lpsz = (char*)W2A((LPCTSTR)write_tmp);
				fputs(lpsz, fptr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -