clockset.cpp

来自「个人计算机定时自动执行软件,是 一个值得看看的程序。」· C++ 代码 · 共 767 行 · 第 1/2 页

CPP
767
字号
	m_flagInitOver=TRUE;

}


void CClockSet::OnSetEdit() //编辑按钮
{
	
	
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		//如果没有选择项,于是单击编辑按钮无效
	}
	else
	{
		CPropertySheet editsheet("编辑");
		CChoicePage editchoicepage;
		CTimerPage	edittimerpage;
		
		editsheet.AddPage(&edittimerpage);
		editsheet.AddPage(&editchoicepage);
		editsheet.m_psh.dwFlags|=PSH_NOAPPLYNOW;//移除"应用"按钮


		long cursel=m_list.GetSelectionMark();//得到当前项所在位置
		MISSION *peditmission;
		peditmission = (MISSION *)m_list.GetItemData(cursel);//得到当前项的数据
		
		edittimerpage.SetMission(peditmission);	//将要修改的数据传到属性页
		editchoicepage.SetMission(peditmission);//将要修改的数据传到属性页


		int nResponse = editsheet.DoModal();
		if (nResponse == IDOK)//确定
		{
			MISSION mission;

			memset((void*)&mission,0,sizeof(MISSION));

			//修改后将数据读回到结构中
			edittimerpage.ReadData(&mission);
			editchoicepage.ReadData(&mission);

			//再修改指定项列表
			EditList(mission,cursel);

		}
		else if (nResponse == IDCANCEL)//取消
		{
			
		}

	
	}


}

void CClockSet::EditList(MISSION mission,long cursel)
{
	//方法:先删除原先项所在位置,再将新数据加入到原项所在位置。
	m_flagInitOver=FALSE;

	MISSION *pmission;
	pmission = (MISSION *)m_list.GetItemData(cursel);
	delete pmission;//将原先项动态分配所得的内存于以释放。

	m_list.DeleteItem(cursel);//删除项

	AddList(mission,cursel);//将新项增加到指定cursel位置

	m_flagInitOver=TRUE;

}

void CClockSet::OnSetDel() //删除按钮
{
	m_flagInitOver=FALSE;

	//int select=m_list.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
	int select=m_list.GetSelectionMark();
	MISSION *pmission;
	pmission = (MISSION *)m_list.GetItemData(select);
	delete pmission;//将动态分配所得的内存于以释放。

	m_list.DeleteItem(select);


	if(m_list.GetItemCount()==0)//判断列表框是否还有项,如果是0,则将编辑与删除按钮设置为不可用
	{
		GetDlgItem(IDC_SET_EDIT)->EnableWindow(false);
		GetDlgItem(IDC_SET_DEL)->EnableWindow(false);	
	}

	m_flagInitOver=TRUE;

}





////////////////////////////////////////////////////////////////////////////////////////////////////
void CClockSet::OnUsingReport() //启用整点报时
{
	UpdateData();
	if(m_usingreport)//当为启用时,打勾
	{
		if(m_standardbell==0)//判断选择点在哪个上面
			OnStandardBell();

		if(m_standardbell==1)
			OnDefinedBell();

		if(m_standardbell==2)
			OnSoundBell();
	}
	else//当未启用时,未打勾
	{
		GetDlgItem(IDC_SET_STANDARDBELL)->EnableWindow(false);
		GetDlgItem(IDC_SET_DEFINEDBELL)->EnableWindow(false);
		GetDlgItem(IDC_SET_SOUNDBELL)->EnableWindow(false);
		GetDlgItem(IDC_BROWSE)->EnableWindow(false);
		GetDlgItem(IDC_SET_AUDITION)->EnableWindow(false);

		GetDlgItem(IDC_SET_USINGTIMEREPORTEDIT)->EnableWindow(false);
		GetDlgItem(IDC_COMBO1)->EnableWindow(false);

	}
	

}


void CClockSet::OnStandardBell() //使用标准铃声
{
	m_standardbell=0;

	GetDlgItem(IDC_SET_STANDARDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_DEFINEDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_SOUNDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_AUDITION)->EnableWindow();

	GetDlgItem(IDC_SET_USINGTIMEREPORTEDIT)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_BROWSE)->EnableWindow(false);
	GetDlgItem(IDC_SET_USINGTIMEREPORTEDIT)->EnableWindow(false);

	m_judgesound=0;
}

void CClockSet::OnDefinedBell() //使用自定义铃声
{
	m_standardbell=1;
	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *p = strrchr(files_path,'\\');
	p[1]='\0';
	strcat(files_path,"Settings.ini");
	char buffer[256];
	GetPrivateProfileString("Sound","m_strPath","",buffer,256,files_path);
	m_strPath.Format("%s",buffer);

	GetDlgItem(IDC_SET_STANDARDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_DEFINEDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_SOUNDBELL)->EnableWindow();

	GetDlgItem(IDC_SET_USINGTIMEREPORTEDIT)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_BROWSE)->EnableWindow();
	GetDlgItem(IDC_SET_AUDITION)->EnableWindow();
	GetDlgItem(IDC_SET_USINGTIMEREPORTEDIT)->EnableWindow();
	
	m_judgesound=1;
}

void CClockSet::OnSoundBell() //语音报时
{
	m_standardbell=2;
	GetDlgItem(IDC_SET_STANDARDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_DEFINEDBELL)->EnableWindow();
	GetDlgItem(IDC_SET_SOUNDBELL)->EnableWindow();
	

	GetDlgItem(IDC_SET_USINGTIMEREPORTEDIT)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_COMBO1)->ShowWindow(SW_SHOW);
	
	
	GetDlgItem(IDC_SET_AUDITION)->EnableWindow();
	GetDlgItem(IDC_BROWSE)->EnableWindow(false);
	GetDlgItem(IDC_COMBO1)->EnableWindow();
	m_judgesound=2;

}

void CClockSet::OnBrowse() //浏览按钮
{
	CFileDialog FileDialog(TRUE,"",m_strPath,OFN_OVERWRITEPROMPT,
		"Execture File(*.wav)|*.wav|All Files(*.*)|*.*||");
	if (FileDialog.DoModal()==IDOK) 
	{
		UpdateData(TRUE);
		m_strPath	= FileDialog.GetPathName();
		UpdateData(FALSE);
	}
}

void CClockSet::OnAudition() //试听按钮
{
	BeginWaitCursor();//显示漏斗型等待光标

	if(m_judgesound==0)//判断铃声选项
	{
		PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(),SND_RESOURCE);//播入标准铃声
	}
	if(m_judgesound==1)
	{
		PlaySound(m_strPath,NULL,SND_FILENAME);//播放自定义声音
	}	
	if(m_judgesound==2)
	{
		PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(),SND_RESOURCE);//播入标准铃声(暂时用标准铃声代替)
		
	}	
	EndWaitCursor();
}

////////////////////////////////////////////////////////////////////////////////





void CClockSet::OnOK() //保存数据到文件
{
	char buffer[256];

	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *pp = strrchr(files_path,'\\');
	pp[1]='\0';
	strcat(files_path,"Settings.ini");
	
	//启用整点报时,1为启用,0为不启用
	WritePrivateProfileString("Sound","m_usingreport",m_usingreport? "1":"0",files_path);
	//标准铃声,0使用标准铃声,1使用自定义铃声,2使用语音报时。
	switch(m_standardbell)
	{
	case 0:
		WritePrivateProfileString("Sound","m_standardbell","0",files_path);
		break;
	case 1:
		WritePrivateProfileString("Sound","m_standardbell","1",files_path);
		break;
	case 2:
		WritePrivateProfileString("Sound","m_standardbell","2",files_path);
		break;
	}
	//铃声路径
	memset(buffer,0,256);
	memcpy(buffer,m_strPath,m_strPath.GetLength());
	WritePrivateProfileString("Sound","m_strPath",buffer,files_path);



	//将数据保存到文件中
	char out_path[512];
	GetModuleFileName(NULL,out_path,512);//得到程序运行所在位置
	char *p = strrchr(out_path,'\\');//从得到路径字符串,反向一直搜索到"\"为止。
	p[1]='\0';//将'\'之后的字符赋为0.
	strcat(out_path,"Mission.dat");//再将Mission.dat添加到修改之后的路径之后。

	int listcount = m_list.GetItemCount();
	CFile file;
	if(listcount>=0)//列表中项如果>=0时,都要保存数据
	{
		if(file.Open(out_path,CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary))
		{
			BYTE length[4];
			long *plength=(long*)length;
			*plength=listcount;
			file.Write((void*)length,4);

			for(int i=0;i<listcount;i++)
			{	
				MISSION *savemission;
				savemission = (MISSION *)m_list.GetItemData(i);
				file.Write((void*)savemission,sizeof(MISSION));
			}

			file.Close();
		}
	}

	//要将动态分配的内存释放
	CDialog::OnOK();
}






void CClockSet::OnItemchangedSetList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	//当列表框中项有所改变时,调用这个函数
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	GetDlgItem(IDC_SET_EDIT)->EnableWindow();
	GetDlgItem(IDC_SET_DEL)->EnableWindow();

	
		if(m_flagInitOver)//判断列表框初始化是否结束,初始化列表项时,值为0(FALSE),将不执行以下代码
		{
		
			long cursel = m_list.GetItemCount();
			if(cursel<=0) return;

			for(long i=0; i<cursel; i++)
			{
				long lCheck=m_list.GetCheck(i);

				MISSION *peditmission;
				peditmission = (MISSION *)m_list.GetItemData(i);//得到当前项的数据
				
				if(peditmission->set_using != lCheck)
				{
					peditmission->set_using = lCheck;
					m_list.SetItemData(i,(DWORD)peditmission);
				}
			}
			
			//m_flagInitOver=FALSE;
		}
		


	*pResult = 0;
}


BOOL CClockSet::DestroyWindow() //当关闭窗口时调用,释放所占用的资源
{
	for (int i=0;i < m_imagelist.GetImageCount();i++)
	{
		m_imagelist.Remove(i);
	}
	m_imagelist.Detach();
	m_flagInitOver=FALSE;
	//将数据动态分配的内存释放
	for(int k=0;k<m_list.GetItemCount();k++)
	{
		MISSION *pmission;
		pmission = (MISSION *)m_list.GetItemData(k);
		delete pmission;
	}

	return CDialog::DestroyWindow();
}



void CClockSet::OnDblclkSetList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnSetEdit();
	*pResult = 0;
}



void CClockSet::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	CRect rect;
	GetWindowRect(&rect);
	SetWindowPos(NULL,250,200,rect.Width(),rect.Height(),0);	
}

⌨️ 快捷键说明

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