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 + -
显示快捷键?