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

📄 s200807003_alarmclockdlg.cpp

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

				write_tmp.Format(L"task%d=%s\n", index, get_s_datetime);

				//USES_CONVERSION; 
				lpsz = (char*)W2A((LPCTSTR)write_tmp);
				fputs(lpsz, fptr);
			}
		}
		index = 1;
		fputs("[RemindEveryDayInfo]\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);

				write_tmp.Format(L"task%d=%s\n", index, get_s_datetime);

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

	CDialog::OnOK();
}

void CS200807003_AlarmClockDlg::OnButtonDel() 
{
	// TODO: Add your control notification handler code here
	int nItem, count;
	POSITION pos_box, pos_list;
	Alarm *tmp;

	// 得到第一条选中记录的位置
	pos_box = m_schedule_list.GetFirstSelectedItemPosition();
	if(pos_box == NULL)
		MessageBox(L"No items were selected");
	else 
		while(pos_box != NULL) {	// 删除所有选中的记录(包括列表框和AlarmSet)
			nItem = m_schedule_list.GetNextSelectedItem(pos_box);
			m_schedule_list.DeleteItem(nItem);
			if((pos_list = AlarmSet->GetHeadPosition()) != NULL) {
				for(count=0; count<=nItem; count++)
					tmp = (Alarm *)AlarmSet->GetNext(pos_list);
				AlarmSet->RemoveAt(AlarmSet->Find(tmp));
			}
			pos_box = m_schedule_list.GetFirstSelectedItemPosition();
		}
}

void CS200807003_AlarmClockDlg::OnButtonDelall() 
{
	// TODO: Add your control notification handler code here
	m_schedule_list.DeleteAllItems();
	AlarmSet->RemoveAll();
}

void CS200807003_AlarmClockDlg::OnCheckEvery() 
{
	// TODO: Add your control notification handler code here
	if(m_is_everyday.GetCheck() == 1)
		m_schedule_time.SetFormat(L"HH:mm:ss");
	else
		m_schedule_time.SetFormat(L"yyyy-MM-dd HH:mm:ss");
}

void CS200807003_AlarmClockDlg::File2AlarmSet()
{	// 从文件中读取记录到AlarmSet表里 
	FILE *fptr;
	char buffers[50];
	char tmp_datetime[50], tmp_text[50];
	char cmpdata1[30]="[RemindOnceInfo]";
	char cmpdata2[30]="[RemindEveryDayInfo]";
	int i, j, mark=0;
	Alarm *New_Alarm;

	i=0;

	if((fptr=fopen("alarm_data.ini","r"))==NULL)	// 在这里只做读操作
		MessageBox(L"Can not open the file");
	else {
		while(fgets(buffers, 50, fptr) != NULL) {
			if(strncmp(cmpdata1,buffers,16) && strncmp(cmpdata2,buffers,20)) {
				while(buffers[i] != '=') i++;	// 读取闹铃文字内容到tmp_text
				i++;	// i中存的是第一个有效字符的位置
				j = 0;
				while(buffers[i] != '\n') {
					tmp_text[j]=buffers[i];
					i++;
					j++;
				}

				for(i=0; i<50; i++) buffers[i] = NULL;
				i = 0;
				j = 0;

				fgets(buffers, 50, fptr);
				while(buffers[i] != '=') i++;	// 读取日期时间到tmp_datetime
				i++;
				j = 0;
				while(buffers[i] != '\n') {
					tmp_datetime[j] = buffers[i];
					i++;
					j++;
				}
				if(mark == 1) {	// 闹铃记录加入链表
					New_Alarm = new Alarm(false, tmp_datetime, tmp_text);
					AlarmSet->AddTail(New_Alarm);
				}
				else if(mark == 2) {
					New_Alarm = new Alarm(true, tmp_datetime, tmp_text);
					AlarmSet->AddTail(New_Alarm);
				}
			}
			else {
				if(!strncmp(cmpdata1, buffers, 16))
					mark = 1;	// 表示当前记录是一次闹铃
				if(!strncmp(cmpdata2, buffers, 20))
					mark = 2;	// 表示当前记录是每日闹铃
			}
			for(i=0; i<50; i++) {	// 加入一个记录以后所有清空缓冲区
				buffers[i] = NULL;
				tmp_datetime[i] = NULL;
				tmp_text[i] = NULL;
			}
			i = 0;
			j = 0;
		}
		fclose(fptr);
	}

}

bool CS200807003_AlarmClockDlg::is_conflict(CString text_time)
{	// 判断设置的时间是否重复
	POSITION pos;
	Alarm *tmp;
	if((pos = AlarmSet->GetHeadPosition()) != NULL) {
		if(m_is_everyday.GetCheck() == 1)
			while(pos) {
				tmp = (Alarm *)AlarmSet->GetNext(pos);
				if(tmp->get_is_everyday() && tmp->get_datetime() == text_time)
					return true;
			}
		if(m_is_everyday.GetCheck() == 0)
			while(pos) {
				tmp = (Alarm *)AlarmSet->GetNext(pos);
				if(!tmp->get_is_everyday() && tmp->get_datetime() == text_time)
					return true;
			}
		return false;
	}
	return false;
}

bool CS200807003_AlarmClockDlg::is_overcount()
{
	POSITION pos;
	Alarm *tmp;
	int count = 0;
	if((pos = AlarmSet->GetHeadPosition()) != NULL) {
		if(m_is_everyday.GetCheck() == 1) {
			while(pos) {
				tmp = (Alarm *)AlarmSet->GetNext(pos);
				if(tmp->get_is_everyday())	count++;
			}
			if(count == 5) return true;
		}
		if(m_is_everyday.GetCheck() == 0) {
			while(pos) {
				tmp = (Alarm *)AlarmSet->GetNext(pos);
				if(!tmp->get_is_everyday())	count++;
			}
			if(count == 5) return true;
		}
		return false;
	}
	return false;
}

DWORD  CS200807003_AlarmClockDlg::ThreadFunOne(LPVOID lpParam)
{	// 设置更新的时间框会在用户不更新时间的时侯自动刷新显示当前时间
	CS200807003_AlarmClockDlg *pDlg = (CS200807003_AlarmClockDlg *)lpParam;
	COleDateTime tmp;
	while(1) {
		Sleep(1000);
		tmp = COleDateTime::GetCurrentTime();
		pDlg->m_current_time.SetTime(tmp);
	}
	return 0;
}

void CS200807003_AlarmClockDlg::OnSetfocusDatetimepickerCur(NMHDR* pNMHDR, LRESULT* pResult) 
{	// 当设置更新的时间框获得焦点时就暂停时间的更新
	// TODO: Add your control notification handler code here
	SuspendThread(m_hThreadOne);
	*pResult = 0;
}

DWORD  CS200807003_AlarmClockDlg::ThreadFunTwo(LPVOID lpParam)
{	// 不断地遍历AlarmSet,检查是否有需要执行的闹铃
	CS200807003_AlarmClockDlg *pDlg = (CS200807003_AlarmClockDlg *)lpParam;
	POSITION pos;
	Alarm *tmp;
	COleDateTime get_c_cur_time, get_c_list_time;
	CString result;
	int count;
	while(1) {
		Sleep(800);
		pos = pDlg->AlarmSet->GetHeadPosition();
		get_c_cur_time = COleDateTime::GetCurrentTime();
		count = 0;

		while(pos) {
			tmp = (Alarm *)pDlg->AlarmSet->GetNext(pos);
			if(tmp->get_is_everyday())
				get_c_list_time.SetDateTime(
					get_c_cur_time.GetYear(),
					get_c_cur_time.GetMonth(), 
					get_c_cur_time.GetDay(), 
					(short)_ttoi(tmp->get_datetime().Mid(0, 2)),
					(short)_ttoi(tmp->get_datetime().Mid(3, 2)),
					(short)_ttoi(tmp->get_datetime().Mid(6, 2)));

			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) {
				result.Format(L"%s:\n%s", tmp->get_datetime(), tmp->get_text());
				AfxMessageBox(result);
				if(!tmp->get_is_everyday()) {
					//在列表框和AlarmSet里删除相应的记录(只删除一次闹铃)
					pDlg->AlarmSet->RemoveAt(pDlg->AlarmSet->Find(tmp));
					pDlg->m_schedule_list.DeleteItem(count);
				}
			}
			count++;
		}
	}
	return 0;
}

⌨️ 快捷键说明

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