📄 timerpage.cpp
字号:
// TimerPage.cpp : implementation file
//
#include "stdafx.h"
#include "clock.h"
#include "TimerPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTimerPage property page
IMPLEMENT_DYNCREATE(CTimerPage, CPropertyPage)
CTimerPage::CTimerPage() : CPropertyPage(CTimerPage::IDD)
{
//{{AFX_DATA_INIT(CTimerPage)
m_using = TRUE;//check框打勾
m_topic = _T("");
m_books = 0;
m_mode = 0;
m_message = _T("");
m_place = _T("");
m_cycletime = 0;
//}}AFX_DATA_INIT
m_isActive=FALSE;
//结构初始化
memset((void*)&m_mission,0,sizeof(MISSION));
m_mission.set_using=1;
}
CTimerPage::~CTimerPage()
{
}
void CTimerPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTimerPage)
DDX_Control(pDX, IDC_SET_TIME, m_time);
DDX_Control(pDX, IDD_SET_IMAGE, m_ctrlImage);
DDX_Control(pDX, IDC_SET_BOOKS, m_ctrlBooks);
DDX_Control(pDX, IDC_SET_DATE, m_date);
DDX_Control(pDX, IDC_SET_WEEKS, m_weeks);
DDX_Check(pDX, IDC_SET_USING, m_using);
DDX_Text(pDX, IDC_SET_TOPIC, m_topic);
DDX_CBIndex(pDX, IDC_SET_BOOKS, m_books);
DDX_CBIndex(pDX, IDC_SET_MODE, m_mode);
DDX_Text(pDX, IDC_SET_MESSAGE, m_message);
DDX_Text(pDX, IDC_SET_PLACE, m_place);
DDX_Text(pDX, IDC_SET_CYCLE, m_cycletime);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTimerPage, CPropertyPage)
//{{AFX_MSG_MAP(CTimerPage)
ON_CBN_SELCHANGE(IDC_SET_BOOKS, OnSelchangeSetBooks)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SET_DATE, OnDatetimechangeSetDate)
ON_CBN_SELCHANGE(IDC_SET_MODE, OnSelchangeSetMode)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTimerPage message handlers
BOOL CTimerPage::OnInitDialog() //初始化
{
CPropertyPage::OnInitDialog();
m_cycletime = m_mission.set_time_cycletime;
if(m_cycletime==0)
{
m_cycletime=1;
}
m_using = m_mission.set_using;
m_mode = m_mission.set_mode;
switch(m_mode)//用于编辑时,根据闹铃方式,判断日期与星期是否可用状态。
{
case 0:
GetDlgItem(IDC_SET_DATE)->EnableWindow();
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 1:
GetDlgItem(IDC_SET_DATE)->EnableWindow(false);
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 2:
GetDlgItem(IDC_SET_DATE)->EnableWindow(false);
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 3:
GetDlgItem(IDC_SET_DATE)->EnableWindow();
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 4:
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
GetDlgItem(IDC_SET_DATE)->EnableWindow();
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
m_date.SetFormat(_T("' 每月 'd'日'"));
break;
case 5:
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
GetDlgItem(IDC_SET_DATE)->EnableWindow();
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
m_date.SetFormat(_T("' 每年 'M'月'd'日'"));
break;
case 6:
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_DATE)->EnableWindow(false);
break;
}
m_books = m_mission.set_books;
HANDLE hIcon;
switch(m_books)//用于编辑时,根据闹铃图示,正确显示图标
{
case 0:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 1:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON2) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 2:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON3) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 3:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON4) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 4:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON5) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 5:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON6) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
}
m_ctrlImage.SetIcon( (HICON)hIcon );//显示图标
//DestroyIcon((HICON)hIcon);
CString str_topic = m_mission.set_topic;
m_topic = str_topic;
CString str_place = m_mission.set_place;
m_place = str_place;
CString str_message = m_mission.set_message;
m_message = str_message;
SYSTEMTIME sysTime;
memset(&sysTime, 0, sizeof(sysTime));
m_date.GetTime(&sysTime);
m_weeks.SetCurSel(sysTime.wDayOfWeek);//初始化星期
m_time.SetFormat(_T("H:mm:00"));//由于不计秒,所以将秒初始化为0,且不能编辑
//根据编辑时传入的值初始化对话框
sysTime.wYear = m_mission.set_date_year;
sysTime.wMonth = m_mission.set_date_month;
sysTime.wDay = m_mission.set_date_day;
m_date.SetTime(&sysTime);
sysTime.wHour = m_mission.set_time_hour;
sysTime.wMinute = m_mission.set_time_minute;
m_time.SetTime(&sysTime);
UpdateData(FALSE);
return TRUE;
}
void CTimerPage::OnSelchangeSetBooks() //新建闹铃时,闹铃主题与显示图标
{
HANDLE hIcon;
UpdateData(TRUE);
switch(m_books)//载入图标,MAKEINTRESOURCE宏将资源转为函数可用的参数
{
case 0:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 1:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON2) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 2:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON3) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 3:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON4) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 4:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON5) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
case 5:
hIcon=::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON6) ,IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
break;
}
if(m_ctrlImage.GetIcon()!=NULL)
DestroyIcon(m_ctrlImage.GetIcon());
m_ctrlImage.SetIcon( (HICON)hIcon );//显示图标
}
void CTimerPage::OnDatetimechangeSetDate(NMHDR* pNMHDR, LRESULT* pResult)
{
//根据闹铃日期的改变,星期也跟着改变
SYSTEMTIME sysTime;
memset(&sysTime, 0, sizeof(sysTime));
m_date.GetTime(&sysTime);
m_weeks.SetCurSel(sysTime.wDayOfWeek);
*pResult = 0;
}
//新建时,根据闹铃方式选项,判断日期与星期选项是否可用状态。
void CTimerPage::OnSelchangeSetMode()
{
UpdateData(TRUE);
switch(m_mode)
{
case 0:
GetDlgItem(IDC_SET_DATE)->EnableWindow();
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 1:
GetDlgItem(IDC_SET_DATE)->EnableWindow(false);
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 2:
GetDlgItem(IDC_SET_DATE)->EnableWindow(false);
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 3:
GetDlgItem(IDC_SET_DATE)->EnableWindow();
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
break;
case 4:
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
GetDlgItem(IDC_SET_DATE)->EnableWindow();
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
m_date.SetFormat(_T("' 每月 'd'日'"));
break;
case 5:
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
GetDlgItem(IDC_SET_DATE)->EnableWindow();
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
m_date.SetFormat(_T("' 每年 'M'月'd'日'"));
break;
case 6:
GetDlgItem(IDC_SET_WEEKS)->EnableWindow(false);
m_date.SetFormat(_T("yyyy'年'M'月'd'日'"));
GetDlgItem(IDC_SET_TIME)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_SET_CYCLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SET_DATE)->EnableWindow(false);
break;
}
}
BOOL CTimerPage::OnKillActive() //未输入闹铃主题之前跳出提示
{
UpdateData(TRUE);//data is being retrieved
CEdit* pEdit=(CEdit*)GetDlgItem(IDC_SET_TOPIC);
pEdit->GetWindowText(m_topic);
if(m_topic.GetLength()==0)
{
AfxMessageBox("请输入闹铃主题!");
return false;
}
else
return true;
}
void CTimerPage::ReadData(MISSION *pMission)//读取数据
{
///*
if(!m_isActive)
return;
pMission->set_using = m_mission.set_using;
pMission->set_mode = m_mission.set_mode;
pMission->set_books = m_mission.set_books;
strcpy(pMission->set_topic,m_mission.set_topic);
strcpy(pMission->set_place,m_mission.set_place);
strcpy(pMission->set_message,m_mission.set_message);
pMission->set_date_year = m_mission.set_date_year;
pMission->set_date_month = m_mission.set_date_month;
pMission->set_date_day = m_mission.set_date_day;
pMission->set_date_week = m_mission.set_date_week;
pMission->set_time_hour = m_mission.set_time_hour;
pMission->set_time_minute = m_mission.set_time_minute;
// pMission->set_time_second = m_mission.set_time_second;
pMission->set_time_cycletime = m_mission.set_time_cycletime;
//*/
}
void CTimerPage::OnOK()
{
//按OK时将值传给结构。
m_isActive=TRUE;
UpdateData();
m_mission.set_using = m_using?1:0;
m_mission.set_mode = m_mode;
m_mission.set_books = m_books;
strcpy(m_mission.set_topic,m_topic);
strcpy(m_mission.set_place,m_place);
strcpy(m_mission.set_message,m_message);
SYSTEMTIME sysDate;
memset(&sysDate, 0, sizeof(sysDate));
m_date.GetTime(&sysDate);
m_mission.set_date_year = sysDate.wYear;
m_mission.set_date_month = sysDate.wMonth;
m_mission.set_date_day = sysDate.wDay;
m_mission.set_date_week = sysDate.wDayOfWeek;
SYSTEMTIME sysTime;
memset(&sysTime, 0, sizeof(sysTime));
m_time.GetTime(&sysTime);
m_mission.set_time_hour = sysTime.wHour;
m_mission.set_time_minute = sysTime.wMinute;
// m_mission.set_time_second = sysTime.wSecond;
if(m_cycletime==0)
{
m_cycletime=1;
}
m_mission.set_time_cycletime = m_cycletime;
CPropertyPage::OnOK();
}
void CTimerPage::SetMission(MISSION *peditmission)//将传入的值赋于
{
memcpy((void*)&m_mission,(void*)peditmission,sizeof(MISSION));
}
void CTimerPage::OnDestroy()
{
CPropertyPage::OnDestroy();
// TODO: Add your message handler code here
if(m_ctrlImage.GetIcon()!=NULL)
DestroyIcon(m_ctrlImage.GetIcon());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -