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

📄 settimerdlg.cpp

📁 windows小帮手,vc6.0开发的,有点小问题
💻 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 + -