📄 settimerdlg.cpp
字号:
// SettimerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Helper.h"
#include "SettimerDlg.h"
#include "SmallMsgDlg.h"
#include "Modifydlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSettimerDlg dialog
CSettimerDlg::CSettimerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSettimerDlg::IDD, pParent)
{
CTime time;
time = CTime::GetCurrentTime();
//{{AFX_DATA_INIT(CSettimerDlg)
m_nHour = time.GetHour();
m_nMinute = time.GetMinute();
m_nSecond = time.GetSecond();
m_strThingToRemind = _T("");
m_bUrgent = FALSE;
m_nMonth = time.GetMonth();
m_nDay = time.GetDay();
m_nYear = time.GetYear();
//}}AFX_DATA_INIT
m_bNewThingAdd = FALSE;
m_bUrgent = FALSE;
m_pImageList = NULL;
}
CSettimerDlg::~CSettimerDlg()
{
if(m_pImageList!=NULL)
delete m_pImageList;
}
void CSettimerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSettimerDlg)
DDX_Control(pDX, IDC_REMINGTHING_LIST, m_ctrlJobList);
DDX_Text(pDX, IDC_HOUR, m_nHour);
DDV_MinMaxInt(pDX, m_nHour, 0, 23);
DDX_Text(pDX, IDC_MINUTE, m_nMinute);
DDV_MinMaxInt(pDX, m_nMinute, 0, 59);
DDX_Text(pDX, IDC_SECOND, m_nSecond);
DDV_MinMaxInt(pDX, m_nSecond, 0, 59);
DDX_Text(pDX, IDC_THING_TO_REMIND, m_strThingToRemind);
DDV_MaxChars(pDX, m_strThingToRemind, 512);
DDX_Check(pDX, IDC_URGENT, m_bUrgent);
DDX_Text(pDX, IDC_MONTH, m_nMonth);
DDV_MinMaxInt(pDX, m_nMonth, 0, 12);
DDX_Text(pDX, IDC_DAY, m_nDay);
DDV_MinMaxInt(pDX, m_nDay, 0, 31);
DDX_Text(pDX, IDC_YEAR, m_nYear);
DDV_MinMaxInt(pDX, m_nYear, 2000, 2500);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSettimerDlg, CDialog)
//{{AFX_MSG_MAP(CSettimerDlg)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSettimerDlg message handlers
void CSettimerDlg::OnRemove()
{
// TODO: Add your control notification handler code here
POSITION pos = m_ctrlJobList.GetFirstSelectedItemPosition();
int nSelectedItem = m_ctrlJobList.GetNextSelectedItem(pos);
if(nSelectedItem == -1)
{
MessageBox("Please select an item first", "Helper Message", MB_ICONEXCLAMATION);
return;
}
m_ctrlJobList.DeleteItem(nSelectedItem);
}
void CSettimerDlg::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int nTotal;
nTotal = m_ctrlJobList.GetItemCount();
LV_ITEM lvitem;
int iActualItem = 0;
char buffer[4][512];
sprintf(buffer[0], "");
sprintf(buffer[1], "%s", m_strThingToRemind);
sprintf(buffer[2], "%4d-%02d-%02d %02d:%02d:%02d", m_nYear, m_nMonth, m_nDay, m_nHour, m_nMinute, m_nSecond);
CTime time;
time = CTime::GetCurrentTime();
sprintf(buffer[3], "%4d-%02d-%02d %02d:%02d:%02d", time.GetYear(), time.GetMonth(), time.GetDay(),
time.GetHour(), time.GetMinute(), time.GetSecond());
for (int iSubItem = 0; iSubItem < 4; iSubItem++)
{
lvitem.mask = LVIF_TEXT;
lvitem.iItem = (iSubItem == 0)? nTotal : iActualItem;
lvitem.iSubItem = iSubItem;
// lvitem.iImage = m_bUrgent ? JOBTYPE_URGENT : JOBTYPE_NORMAL;
lvitem.pszText = buffer[iSubItem];
if (iSubItem == 0)
iActualItem = m_ctrlJobList.InsertItem(&lvitem);
else
m_ctrlJobList.SetItem(&lvitem);
}
if(m_bUrgent)m_ctrlJobList.SetCheck(nTotal);
}
BOOL CSettimerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
DWORD dwStyle = GetWindowLong(m_ctrlJobList.GetSafeHwnd(), GWL_STYLE);
if((dwStyle&LVS_TYPEMASK) != LVS_REPORT){
SetWindowLong(m_ctrlJobList.GetSafeHwnd(),
GWL_STYLE, (dwStyle&~LVS_TYPEMASK)|LVS_REPORT);
}
DWORD oldStyle = m_ctrlJobList.GetExtendedStyle();
m_ctrlJobList.SetExtendedStyle(oldStyle | LVS_EX_CHECKBOXES |LVS_EX_FULLROWSELECT);
//Set image list of the ctrllist
// m_pImageList = new CImageList;
// m_pImageList->Create(IDB_URGENT_TYPE, 16, 1, RGB(255,255,255));
// m_ctrlJobList.SetImageList(m_pImageList, LVSIL_SMALL);
//set column text
m_ctrlJobList.InsertColumn(0, "", LVCFMT_CENTER, 30, -1);
m_ctrlJobList.InsertColumn(1, "Thing", LVCFMT_LEFT, 240, -1);
m_ctrlJobList.InsertColumn(2, "Time", LVCFMT_RIGHT, 120, -1);
m_ctrlJobList.InsertColumn(3, "Set Time", LVCFMT_RIGHT, 120, -1);
//set an image to the first column
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(IDC_REMINGTHING_LIST)->GetDlgItem(0);
//set an bitmap to the header of the first column
HD_ITEM hdi;
pHeader->GetItem (0, &hdi);//get property of the first column
hdi.mask = HDI_BITMAP | HDI_FORMAT;
hdi.fmt |= HDF_BITMAP|HDF_CENTER;
hdi.hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_URGENT),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
ASSERT(hdi.hbm!=NULL);
pHeader->SetItem (0, &hdi);
//set the contents of the ctrllist
CFile file; // file to joblist
char filename[_MAX_PATH];
char pathname[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(NULL, pathname, _MAX_PATH);
_splitpath(pathname, drive, dir, fname, ext);
_makepath(filename, drive, dir, "joblist", "dat");
if(file.Open(filename, CFile::modeRead)!=NULL)
{
int nBytesRead = file.Read(&m_structThing, sizeof(THINGTOREMIND));
int nTemp = sizeof(THINGTOREMIND);
if(nBytesRead < sizeof(THINGTOREMIND))
{
//file not found or the file may be damaged
}
else
{
int nTotal = m_structThing.nTotal;
for(int i=0; i<nTotal; i++)
{
LV_ITEM lvitem;
int iActualItem = 0;
char buffer[4][512];
sprintf(buffer[0], "");
sprintf(buffer[1], "%s", m_structThing.strThing);
sprintf(buffer[2], "%4d-%02d-%02d %02d:%02d:%02d", m_structThing.nYear, m_structThing.nMonth, m_structThing.nDay,
m_structThing.nHour, m_structThing.nMinute, m_structThing.nSecond);
sprintf(buffer[3], "%4d-%02d-%02d %02d:%02d:%02d", m_structThing.nSetYear, m_structThing.nSetMonth,
m_structThing.nSetDay, m_structThing.nSetHour, m_structThing.nSetMinute, m_structThing.nSetSecond);
for (int iSubItem = 0; iSubItem < 4; iSubItem++)
{
lvitem.mask = LVIF_TEXT;
lvitem.iItem = (iSubItem == 0)? i : iActualItem;
lvitem.iSubItem = iSubItem;
lvitem.pszText = buffer[iSubItem];
if (iSubItem == 0)
iActualItem = m_ctrlJobList.InsertItem(&lvitem);
else
m_ctrlJobList.SetItem(&lvitem);
if(m_structThing.bUrgent)m_ctrlJobList.SetCheck(i);
}
file.Read(&m_structThing, sizeof(THINGTOREMIND));
}
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSettimerDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
// return;
// if(m_bNewThingAdd) //don't hide it after debugging
{
CFile file;
char filename[_MAX_PATH];
char pathname[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(NULL, pathname, _MAX_PATH);
_splitpath(pathname, drive, dir, fname, ext);
_makepath(filename, drive, dir, "joblist", "dat");
if(file.Open(filename, CFile::modeCreate | CFile::modeWrite)==NULL)
{
MessageBox("file not open");
CDialog::OnOK();
return;
}
int nTotal;
nTotal = m_ctrlJobList.GetItemCount();
for(int i = 0; i<nTotal; i++)
{
m_structThing.nTotal = nTotal;
m_structThing.bUrgent = m_ctrlJobList.GetCheck(i);
sprintf(m_structThing.strThing, "%s", m_ctrlJobList.GetItemText(i, 1));
CString strSource, strTemp;
strSource.Format("%s", m_ctrlJobList.GetItemText(i, 2));
//year
m_structThing.nYear = atoi(strSource.Left(4));
//month
strTemp = strSource.Left(7);
m_structThing.nMonth = atoi(strTemp.Right(2));
//day
strTemp=strSource.Left(10);
m_structThing.nDay = atoi(strTemp.Right(2));
//hour
strTemp=strSource.Left(13);
m_structThing.nHour = atoi(strTemp.Right(2));
//minute
strTemp=strSource.Left(16);
m_structThing.nMinute = atoi(strTemp.Right(2));
//second
m_structThing.nSecond = atoi(strSource.Right(2));
//get the set time
strSource.Format("%s", m_ctrlJobList.GetItemText(i, 3));
//set year
m_structThing.nSetYear = atoi(strSource.Left(4));
//set month
strTemp=strSource.Left(7);
m_structThing.nSetMonth = atoi(strTemp.Right(2));
//set day
strTemp=strSource.Left(10);
m_structThing.nSetDay = atoi(strTemp.Right(2));
//set hour
strTemp=strSource.Left(13);
m_structThing.nSetHour = atoi(strTemp.Right(2));
//set minute
strTemp=strSource.Left(16);
m_structThing.nSetMinute = atoi(strTemp.Right(2));
//SET second
m_structThing.nSetSecond = atoi(strSource.Right(2));
file.Write(&m_structThing, sizeof(THINGTOREMIND));
}
}
CDialog::OnOK();
}
void CSettimerDlg::OnModify()
{
// TODO: Add your control notification handler code here
POSITION pos = m_ctrlJobList.GetFirstSelectedItemPosition();
int nSelectedItem = m_ctrlJobList.GetNextSelectedItem(pos);
if(nSelectedItem == -1)
{
MessageBox("Please select an item first", "Helper Message", MB_ICONEXCLAMATION);
return;
}
// TRACE("nSelectedItem = %d==============================================\n", nSelectedItem);
CModifyDlg dlg;
dlg.m_bUrgent = m_ctrlJobList.GetCheck(nSelectedItem);
dlg.m_strThingToRemind.Format("%s", m_ctrlJobList.GetItemText(nSelectedItem, 1));
CString strSource, strTemp;
strSource.Format("%s", m_ctrlJobList.GetItemText(nSelectedItem, 2));
//year
dlg.m_nYear = atoi(strSource.Left(4));
//month
strTemp = strSource.Left(7);
dlg.m_nMonth = atoi(strTemp.Right(2));
//day
strTemp=strSource.Left(10);
dlg.m_nDay = atoi(strTemp.Right(2));
//hour
strTemp=strSource.Left(13);
dlg.m_nHour = atoi(strTemp.Right(2));
//minute
strTemp=strSource.Left(16);
dlg.m_nMinute = atoi(strTemp.Right(2));
//second
dlg.m_nSecond = atoi(strSource.Right(2));
if(dlg.DoModal()==IDOK)
{
m_ctrlJobList.DeleteItem(nSelectedItem);
LV_ITEM lvitem;
int iActualItem = 0;
char buffer[4][512];
sprintf(buffer[0], "");
sprintf(buffer[1], "%s", dlg.m_strThingToRemind);
sprintf(buffer[2], "%4d-%02d-%02d %02d:%02d:%02d", dlg.m_nYear, dlg.m_nMonth, dlg.m_nDay,
dlg.m_nHour, dlg.m_nMinute, dlg.m_nSecond);
CTime time;
time = CTime::GetCurrentTime();
sprintf(buffer[3], "%4d-%02d-%02d %02d:%02d:%02d", time.GetYear(), time.GetMonth(), time.GetDay(),
time.GetHour(), time.GetMinute(), time.GetSecond());
for (int iSubItem = 0; iSubItem < 4; iSubItem++)
{
lvitem.mask = LVIF_TEXT;
lvitem.iItem = (iSubItem == 0)? nSelectedItem : iActualItem;
lvitem.iSubItem = iSubItem;
lvitem.pszText = buffer[iSubItem];
if (iSubItem == 0)
iActualItem = m_ctrlJobList.InsertItem(&lvitem);
else
m_ctrlJobList.SetItem(&lvitem);
}
if(dlg.m_bUrgent)
m_ctrlJobList.SetCheck(nSelectedItem, TRUE);
else
m_ctrlJobList.SetCheck(nSelectedItem, FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -