📄 s200807003_alarmclockdlg.cpp
字号:
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 + -