版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京邮电大学通信与信息工程学院软件设计报告学生学号B08020221学生姓名孟祥熙二零一零年九月目录TOC\o"1-3"\h\z前言 2题目一P030M 21、问题分析。 22、设计方案。 33、流程图。 44、测试数据、测试成果、成果分析。 45、有关运营界面。 56、核心代码 5题目二W003E 81、问题分析。 82、设计方案。 83、流程图。 94、测试数据、测试成果、成果分析。 105、有关运营界面。 106、核心代码 11题目三R018M 121、问题分析。 122、设计方案。 123、流程图。 134、测试数据、测试成果、成果分析。 155、有关运营界面。 156、核心代码 16题目四P033H 201、问题分析。 212、设计方案。 213、流程图。 224、测试数据、测试成果、成果分析。 235、有关运营界面。 256、核心代码 26小结 26附录 37前言这次软件设计课程两周时间里,不但使我编程水平在实用方面有了很大提高,更重要是,让我对编程,c++有了更辽阔和进一步结识。理解了mfc,理解了可视化窗口建立,及控件实用办法。Mfc学习,能将咱们编程知识真正应用到实用中去,例如我本人日后做单片机串口显示温度上位机,就运用了MSCOMM插件。在选题,搜索查找资料过程中,咱们接触到了之前在课堂中并未接触过方向。通过图书馆,网络,咱们对资料查找能力得到锻炼,学到了诸多关于算法和编程办法,让咱们得到了这样意识,学会跟资料沟通跟学好基本知识同样重要,并且是咱们编程思想源泉。并且,在这个新技术层出不穷年代,仅仅掌握一套东西是不够,要大胆去尝试,去学习新东西,才干不被裁减。好程序,只有想到所有也许发生状况才干达到完美,通过一遍遍测试,考虑各种状况,调试,一种程序才干被人信任。一种学生才干有底气像验收教师演示自己程序。虽然我还是考虑了诸多状况,但是由于初识mfc,时间紧促,因此有状况虽然想到了但实现起来还是有些力不从心,我会运用课余时间继续这段时间来对mfc学习。题目一P030M1、问题分析。一,题目:编程实现一种简易计算器,实现基本加减乘除运算功能。在计算器面板上,有0—9数字按钮,同步尚有加减乘除运算按钮已经清空运算框按钮,顾客可以直接点击面板进行输入数字并计算。输入和输出成果数据共用一种文本框,同步,当进行除法运算时当除数为0,计算器会给出错误提示。二,实现办法:建立一种mfc工程,添加一种编辑框及按钮若干,分别表达加,减,乘,除,及清除,等于,及0-9数字键,通过鼠标点击数字button或者用键盘上数字键直接在编辑框中输入需要运算数;用鼠标点击窗口上运算符号来输入需要进行运算,并在编辑框中显示输入及输出成果。或者按“清除”键重置之前输入。由于编辑框输入数据不能赋给一种整形变量,因此咱们需要用字符型一维数组用来保存需要在编辑框输入输出数据,在进行运算时候,咱们还要将数组转化成整形整数才干进行正常加减乘除运算。因此,需要用到atoi,和itoa两个转换函数。计算器应当有除零报错功能,例如windowsxp中计算器除零后输出:除数不能为零。因此,这个是计算器所必要有功能,虽然在给教师验收中,这个功能并没有实现,但是通过修改代码,当前这个功能可以实现了。三,拓展:考虑到程序健壮性,咱们应当考虑到有不按“数—符号—数—等于”按键组合,一次运算之后会不会对背面计算产生影响等,这个咱们要在详细设计之中考虑2、设计方案。定义三个字符型数组ch[1],ch[2]ch[3],用来存储两个在编辑框中输入运算数,和一种要在编辑框中输出成果。定义一种字符型m-FH,用来保存操作符号,定义三个整形整数num1,num2,num3,用来进行运算中加减。在对话框中添加一种编辑框控件,button控件若干,分别表达加,减,乘,除,及清除,等于,及0-9数字键。并编辑有关函数,用ReplaceSel函数来使之表达有关数字输入,并且在运算符号函数中用atoi将第一种输入数转化成整形,并清屏。在等于函数中加入运算过程:一方面,咱们先用ch2[]保存输入第二个数,并且用atoi将ch2数组转换成num2,通过switch函数将m_FH中保存运算符号选出,并且将num2,跟之前在运算符号函数中已经转换好第一种输入数num1,进行相应运算,得到成果num3。这里有一种特殊状况,就是当运算符号为“/”时候,这里咱们可以用if来判断除数——num2与否为零。因此咱们对成果就差生了两种解决方式。这样咱们需要定义一种flag,默以为0。当除数num2等于0,就令flag=0,然后用SetDlgItemText函数直接输出“dividercannotbe0”,用if(!flag)来控制正常成果输出过程,使之不被运营。当除数num2不为0时候,所有运算都可以正常运营,并且在switch中用num3来保存两个数运算成果,这时flag没有变化。然后咱们用atoi函数将num3转化为能在编辑框中输出数组格式ch3,最后用SetDlgItemText函数将成果显示到编辑框上,运算完毕。此外,当咱们按下“清空”键时候,将编辑框上数字或者错误提示清空,这样再按下符号键或者等于时候不会有反映。流程图。开始开始存入输入框内数字存入输入框内数字ch1与否按清空 Y与否按清空 N将运算键保存到m_FH将ch1数转换为num1,清屏 Y将运算键保存到m_FH将ch1数转换为num1,清屏与否按清空与否按清空在编辑框上输出Dividercannotbe0 N在编辑框上输出Dividercannotbe0存入输入框内数字ch2,将ch2转换为num2存入输入框内数字ch2,将ch2转换为num2num2=0m_FH='/'Ynum2=0m_FH='/'Num3=num2(m_FH)num1将num3转化为ch3 N YNum3=num2(m_FH)num1将num3转化为ch3N在编辑框上输出ch3在编辑框上输出ch3结束结束4、测试数据、测试成果、成果分析。顾客输入:“69”“/”“3”“=”输出成果:23顾客输入:“10000000”“*”“清空”“”“64”“/”“8”“=”输出成果:8顾客输入:“5096”“*”“564”“-”“550”“=”输出成果:14顾客输入:“12”“/”“0”“=”输出成果:dividercannotbe0成果分析:当除数为零时候成果输出dividercannotbe0,提示顾客输入错误,当输入“数字——运算符号——数字——运算符号——等于”时候,第二个输入数被作为正常输入模式第一种输入数进行运算,成果是第二个数和第三个数之间运算成果。5、有关运营界面。普通计算:除数为0:6、核心代码数字键函数示例:voidCDlgDlg::OnButton1(){ m_edit.ReplaceSel("1");}voidCDlgDlg::OnButton2(){ m_edit.ReplaceSel("2");}……运算符号键函数示例:voidCDlgDlg::OnBtnadd()//点击加法操作在这里进行{ CStringstr; if(GetDlgItemText(IDC_BTNADD,str),str=="+") { m_FH='+';//将“+”号操作符保存 } GetDlgItemText(IDC_EDIT1,ch1,10); num1=atoi(ch1); SetDlgItemText(IDC_EDIT1,"");} voidCDlgDlg::OnBtndiv()//点击除法操作{ CStringstr; if(GetDlgItemText(IDC_BTNDIV,str),str=="/") { m_FH='/'; } GetDlgItemText(IDC_EDIT1,ch1,10); num1=atoi(ch1); SetDlgItemText(IDC_EDIT1,"");}等号键运算函数:voidCDlgDlg::OnBtnequ()//在这里进行运算选取,输出计算成果{ UpdateData(); intflag=0;//作为判断除数与否为0标记 GetDlgItemText(IDC_EDIT1,ch2,10); num2=atoi(ch2);//转换ch2为num2 switch(m_FH) { case'+': num3=num1+num2; break; case'-': num3=num1-num2; break; case'*': num3=num1*num2; break; case'/': if(num2==0)//判断除数与否为0 { flag=1; SetDlgItemText(IDC_EDIT1,"dividercannotbe0");//输出错误提示 } else num3=num1/num2; break; } if(!flag)//判断与否浮现0除数,如果不是,进行成果输出 { itoa(num3,ch3,10); SetDlgItemText(IDC_EDIT1,ch3); }//把num3转化成字符串ch3 UpdateData(false);}清空键函数:voidCDlgDlg::OnBtncls(){ SetDlgItemText(IDC_EDIT1,"");}题目二W003E1、问题分析。一,题目:编制程序实现字符串逆转功能。规定具备和谐输入、输出界面。如输入Thisisatest输出tsetasisihT。这是一种简朴题,咱们在这道题中需要将字符串顺序逆转。二,实现办法:这道题咱们可以从三个方面入手:1,咱们可以将一种编辑框输入字符串或数字串赋给这个数组,然后计算这个字符串长度(strlen),互换首尾字符,最后在另一种编辑框中输出。2,咱们可以定义两个一维字符型数组,计算输入编辑框内字符长度,并将输入框内字符串倒叙赋给第二个字符串,在编辑框中输出第二个数组。3,最后办法是最简朴也是最省系统资源,由于主线用不到算法,咱们只需将输出编辑框光标始终在最前端,这样咱们输入正字符就直接被转换成倒叙了。三,拓展:题目规定字符串逆转,如果咱们定义char话,同样可以实现数字串逆转和数字字符混合字串逆转。固然,如果用第三种办法话可以实现任意语句逆转。2、设计方案。一方面新建一种mfc单窗口工程,然后添加两个窗口,并加字标注:输入窗口,输出窗口。办法1:定义两个一维字符型数组buf1[100],buf2[100],分别用于存储输入及倒叙之后字符语句,输入后,计算buf1所存字符长度大小,定义i,j,用for循环将buf[i]从最后一种字节往前,懂得第一种,顺序赋给buf2[j]。然后在输出框更新buf2。办法2:只定义一种字符型数组buf,和字符变量temp。用于存储输入字符语句,和参加完毕互换运算,定义i,j,用for循环按顺序将最后一种和第一种互换,用第二个和倒数第二个互换..到中间一种数时停止操作,并输出新buf。办法3:在重载函数OnChangeEdit1()加入属性,让光标始终停留在最前边,这样直接显示倒叙字符,并且能倒叙所有语句。3、流程图。办法1:开始 开始输入字符串输入字符串N长度合格长度合格YBuf1=字符串Buf1=字符串i=strlen(buf1)J=0 YI>=jBuf1(i)buf(j)互换i--,j++I>=jBuf1(i)buf(j)互换i--,j++输出字符串buf1输出字符串buf1结束结束办法2:开始开始输入字符串输入字符串N长度合格长度合格YBuf1=字符串Buf1=字符串i=strlen(buf1)J=0 Y I>=0Buf2(i)=buf2(j)i--,j++I>=0Buf2(i)=buf2(j)i--,j++n输出字符串buf2 输出字符串buf2结束结束4、测试数据、测试成果、成果分析。依照办法2:顾客输入:ThisisTEST输出成果:tseTsisihT顾客输入:输出成果:顾客输入:!@#$%^&*()_+输出成果:+_)(*&^%$#@!成果分析:顾客输入除中文以外字符都被存储在buf1内,倒叙存入buf2中输出。5、有关运营界面。核心代码办法1:charbuf1[100],temp;//定义中间变量 m_x.GetWindowText(buf1,100); UpdateData(false);intj=0; for(inti=strlen(buf1)-1;i>=j;i--) { temp=buf1[j]; buf1[j]=buf1[i]; buf1[i]=temp; j++; }m_y=buf1; UpdateData(false);办法2:charbuf1[100],buf2[100];//定义两个数组 m_x.GetWindowText(buf1,100);//将输入赋给buf1 UpdateData(false);intj=0;for(inti=strlen(buf1)-1;i>=0;i--)//从后道前将buf1值赋给buf2 { buf2[j]=buf1[i]; j++; }buf2[j]='\0';m_y=buf2;//输出 UpdateData(false);办法3:在函数OnChangeEdit1()中加入如下语句CEdit*edit=(CEdit*)GetDlgItem(IDC_EDIT1);edit->SetSel(0,0,TRUE);题目三P031M问题分析。一,题目:运用VC中Treeview和Listview,做一种自己资源管理器,左侧树状目录可以关闭,当点击一种文献夹时右侧Listview中会显示文献夹内容。尽量模仿windows资源管理器功能,例如左侧文献夹图标变化和右侧listview中可以显示“列表”,“详细资料”。二,实现方式:咱们可以建立一种mfcsdi,然后在其中加入treeview和listview控件,并且设立其起始点为我电脑及桌面,按照windows资源管理器,咱们应当设立一种我电脑起始位置,但是为了以便,咱们应当加上桌面位置。这样咱们可以在左侧树状构造中观测当前所处途径,并在右侧窗口查看当前文献夹中内容。这样,就实现了一种简易资源管理器。三,扩展:在资源管理器中咱们不能只能用来看,应当在listview里面加入粘贴,复制,剪切,删除功能,这才是一种可以称得上实用资源管理器,为了实现这个功能,咱们应当重载listview控件。加入粘贴,复制,剪切,删除函数,并且在菜单里面加入有关借口,这样才干达到实用另一方面,咱们可以加入一种编辑框,令其有如下功能:当输入途径并按下旁边转到按钮,就可以在右侧listview显示输入途径内内容,并且在左侧treeview中显示所输入途径节点。2、设计方案。建立一种mfcsdi,创立TreeView控件,通过设立属性与调用办法对各Node对象进行操作,由于这些操作涉及添加、删除、对齐和其他操作,咱们可以恰当修改使其符合咱们规定。可以编程展开与折回Node对象来显示或隐藏所有子节点。咱们可以用Collapse、Expand和NodeClick三个事件实现此功能。Node对象使用Root、Parent、Child、FirstSibling、Next、Previous和LastSibling属性。在代码中可通过检索对Node对象引用,从而在树上定位。也可以使用键盘定位。UPARROW键和DOWNARROW键向下循环穿过所有展开Node对象。从左到右、从上到下地选取Node对象。若在树底部,选取便跳回树顶部,必要时滚动窗口。RIGHTARROW键和LEFTARROW键也穿过所有展开Node对象,但是如果选取了未展开Node之后再按RIGHTARROW键,该Node便展开;第二次按该键,选取将移向下一种Node。相反,若扩展Node有焦点,这时再按LEFTARROW键,该Node便折回。如果按下ANSI字符集中键,焦点将跳转至以那个字母开头近来Node。后续按该键动作将使选取向下循环,穿过以那个字母开头所有展开节点。ListView控件可使用四种不同视图显示项目。通过此控件,可将项目构成带有或不带有列标头列,并显示随着图标和文本。可使用ListView控件将称作ListItem对象列表条目组织成下列四种不同视图之一:1.大(原则)图标2.小图标3.列表4.报表View属性决定在列表中控件使用何种视图显示项目。还可用LabelWrap属性控制列表中与项目关联标签与否可换行显示。此外,还可管理列表中项目排序办法和选定项目外观。流程图。文献操作示例:删除一种文献流程图开始开始按下右键删除键按下右键删除键strSrcPath=strSelItemPath;strSrcPath=strSelItemPath;将删除文献地址赋给strSrcPath删除strSelItemPath下节点内容删除strSelItemPath下节点内容弹出对话框,显示“文献删除失败”弹出对话框,显示“文献删除失败”弹出对话框,显示“文献删除成功”strSrcPath==0YN结束结束在输入框中输入地址,并转到:开始开始在编辑框中取输入地址,赋给在编辑框中取输入地址,赋给m_strURL Ym_strURL==0m_strURL==0Nm_btnReDirect.EnableWindow(m_btnReDirect.EnableWindow(TURE);m_strURL存入字符串url[i][j],i=0,j=0没有遇到'/0'没有遇到'/0'I++J++ NI++J++没遇到'/'Y 没遇到'/' Ya=0;检查url[a]存在Na=0;检查url[a]存在 YA==j? NA==j? YN报错:“报错:“URLisn'texist!”清空编辑框设立Tree.SetFolder函数变量为strURL,将当前位置变为输入URL结束结束测试数据、测试成果、成果分析。操作一:输入:打开左侧我电脑打开c盘打开haha文献夹在一种文献上点击复制再点击左面桌面点击菜单栏编辑——粘贴成果:弹出对话框——黏贴成功操作二:打开桌面点击刚才复制到桌面文献点击右键删除成果:弹出对话框——删除成功操作三:在编辑框输入:“c:/360download”点击转到成果:右侧展开360download文献夹中内容测试分析:规定成果和自己添加功能都能正常实现。有关运营界面。转到:右键:删除示例:6、核心代码编辑框函数:voidCMyExplorerDlg::OnChangeUrl(){ UpdateData(TRUE); if(m_strURL.GetLength()==0)//编辑框内无内容{ m_btnReDirect.EnableWindow(FALSE); } else{ m_btnReDirect.EnableWindow(TRUE);//编辑框内有内容,则打开 }}“转到”按钮函数:voidCMyExplorerDlg::OnRedirect(){ UpdateData(TRUE); if(m_strURL.GetLength()){ m_wndTree.SetFolder(m_strURL);//将当前目录设为m_strURL}}重载treeview函数,加入如下操作函数:voidCDirListCtrl::OnEditCopy()//复制{ strSrcPath=strSelItemPath; strDesPath=""; nOption=1;}voidCDirListCtrl::OnEidtCut()//剪切{ strSrcPath=strSelItemPath; strDesPath=""; nOption=2; }voidCDirListCtrl::OnEditPaste()//粘贴{ strDesPath=m_strPath; CStringmsg; msg+="源文献:"; msg+=strSrcPath; msg+="\n"; msg+="目的文献:"; msg+=strDesPath; msg+="\n"; if(nOption==1){ if(CopyFile(strSrcPath,strDesPath,FALSE)){ msg+="文献拷贝成功!"; MessageBox(msg); } else{ msg+="文献拷贝失败!"; MessageBox(msg); } } elseif(nOption==2){ if(MoveFile(strSrcPath,strDesPath)){ msg+="文献移动成功!"; MessageBox(msg); } else{ msg+="文献移动失败!"; MessageBox(msg); } }}voidCDirListCtrl::OnEditDelete()//删除{ strSrcPath=strSelItemPath; CStringmsg; msg+="源文献:"; msg+=strSrcPath; msg+="\n"; if(DeleteFile(strSrcPath)){ msg+="文献删除成功!"; MessageBox(msg); } else{ msg+="文献删除失败!"; MessageBox(msg); }}在OnInitDialog函数中加入://添加菜单 CMenu*m_Menu=newCMenu; m_Menu->LoadMenu(IDR_MENU_MAINFRAME); SetMenu(m_Menu);//变化窗口位置 CRectrect(0,0,800,600); MoveWindow(&rect); m_wndTree.MoveWindow(10,40,250,490); m_wndList.MoveWindow(260,40,520,490); m_wndTree.Initialize();Treeview初始函数:voidCDirTreeCtrl::Initialize(){ LPITEMIDLISTitemlist; charbuf[256]; intiDesktopIcon; intiComputerIcon; DeleteAllItems(); SetImageList(NULL,0); SHGetSpecialFolderLocation(this->m_hWnd,CSIDL_DESKTOP,&itemlist); SHGetPathFromIDList(itemlist,buf); m_DesktopPath=buf; m_ImageList.Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR24,50,50); m_ImageList.SetBkColor(GetSysColor(COLOR_WINDOW)); iDesktopIcon=m_ImageList.Add(ExtractIcon(AfxGetApp()->m_hInstance,"shell32.dll",34)); iComputerIcon=m_ImageList.Add(ExtractIcon(AfxGetApp()->m_hInstance,"shell32.dll",15)); m_DrivesRoot=InsertItems("我电脑",TVI_ROOT,true,iComputerIcon,iComputerIcon); m_DesktopRoot=AddItem(m_DesktopPath,TVI_ROOT,true,iDesktopIcon,iDesktopIcon);}题目四P033H1、问题分析。一,题目:编写一种时钟实用工具,规定该时钟可图形化显示时间,同步显示日期、星期等。并且要具备音乐报时功能。这个题目需要能实现一种闹钟,这个闹钟能显示时间,日期,星期几,并且具备报时功能,并且这个报时功能还要能同步播放音乐。困难重要在这几种方面:如何获取系统当前时间,如何校对系统时间与闹钟时间,如何报时.此外由于程序是基于MFC,在引入某些函数时与否需要做某些特殊解决?二,实现办法:依照查找,获取时间可以用API函数GetSystemTime,也可以用CTime函数GetCurrentTime都比较简朴。同步,咱们需要用PlaySound函数来播放系统音乐,作为闹钟铃声,这里,咱们也可以应用之前编资源管理器经验来解决自定义铃声选取。一方面,咱们要定义个窗口:其一,显示时间,日期,年月(calendarcontrol),时间跟系统时间同步其二,通过菜单栏弹出设立闹钟时间窗口,这里咱们加入自定义铃声功能,咱们就要加入一种编辑框,和按钮。将闹钟位置存入变量。其三,闹钟时间届时候弹出用来提示顾客“时间到”弹出窗口。其四,咱们可以设计一种窗口,通过她咱们可以让顾客看到之前设立闹钟时间。三,扩展:题目中需要咱们闹钟应当音乐报时,为了增强软件功能,咱们可以在程序设计中加入自定义铃声功能。另一方面,咱们可以设计一种窗口,通过点击菜单中相应项,能让咱们查看到之前设立闹钟时间。最后,咱们还可以加入设立各种闹铃功能,让顾客能设立几种闹钟时间。设计方案。闹钟一共可分为三个模块:1、设立闹钟,2、提示,3、退出;而设立闹钟又可分为:1、设立闹钟音乐,2、设立闹钟时间;设立闹钟时间又有添加,删除和修改三种操作。闹钟闹钟设立闹钟提示设立闹钟时间设立闹钟音乐添加修改删除退出通过函数调用获取系统时间,在主页面相应编辑区显示,调用子函数闹钟设定模块录入闹钟时间,通过设立计时器定期比较设立时间与系统时间,并拟定响应函数,实现闹钟发声,弹出提示页面。依照查找,获取时间可以用API函数GetSystemTime,或者CTime函数GetCurrentTime同步,咱们需要用PlaySound函数来播放系统音乐,作为闹钟铃声,这里,咱们也可以应用之前编资源管理器经验来解决自定义铃声选取。3、流程图。主页面主页面设定闹钟显示模仿时钟显示时间响应闹钟北京时间西安时间关系视图:CLOCKCLOCK类视图资源视图文献视图关于闹钟应用主页模版主页关于框一闹钟主页框一主流程图4、测试数据、测试成果、成果分析。操作1:打开程序打开菜单——时钟设立闹钟时间设立时间为14:00:00设立闹铃途径等待到14:00:00弹出对话框提示顾客,闹铃时间到了!并且播放闹铃操作2:打开程序打开菜单——时钟设立闹钟时间设立时间为14:00:00打开“查看闹铃设立时间”程序提示顾客“闹钟时间设立为14:00:00”操作3:打开程序打开菜单——时钟设立闹钟时间设立时间为14:05:00拟定,弹出对话框“拟定不设立闹铃?”等待到14:05:00弹出对话框提示顾客,闹铃时间到了!并且不播放闹铃操作4:打开程序打开菜单——时钟设立闹钟时间设立时间为14:10:00设立闹铃途径设立闹铃声音关闭等待到14:10:00弹出对话框提示顾客,闹铃时间到了!并且不播放闹铃成果分析:程序可以正常运营,能正常设立闹铃时间跟铃声,并能精确报时,跟系统时间同步。并且随意设立闹铃声音开关。有局限性就是程序没有默认设立铃声,这样每次设立闹钟时间都要设立一下铃声途径,导致了不便,这点有待改进。5、有关运营界面。1,闹钟外观2,闹铃时间及声音途径设立:3,闹钟时间到弹出窗口:6、核心代码一,主框架BOOLCClock2App::InitInstance()//主页面初始化CClock2Module_Module;//建立模板LONGCClock2Module::Unlock()//撤销BOOLCClock2App::InitATL()//初始化ATLCAdd_Alarm::CAdd_Alarm(CWnd*pParent/*=NULL*/) :CDialog(CAdd_Alarm::IDD,pParent)//构造函数,以基本对话框为基类,调用其构造函数。BOOLCClock2Dlg::OnInitDialog()//初始化对话框voidCAdd_Alarm::DoDataExchange(CDataExchange*pDX)//传入父类文献指针,实现对数据校验。BEGIN_MESSAGE_MAP(CAdd_Alarm,CDialog)//获取消息voidCAdd_Alarm::OnOK()//主页面OK键消息响应voidCClock2Dlg::OnSysCommand(UINTnID,LPARAMlParam)//消息传递及响应voidCClock2Dlg::OnButton2()//按钮响应实现闹钟设定voidCClock2Dlg::OnButton3()//按钮响应实现闹钟删除二,系统重要实当代码简介(选用代码片段)1,检测闹钟与否设立voidCClock3Dlg::OnClockCheck(){ //TODO:Addyourcommandhandlercodehere //用对话框提示闹铃未设立 /*if(!dlg.st) { //MessageBox("闹铃尚未设立!","温馨提示",MB_OK|MB_ICONEXCLAMATION); GetMenu()->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED); } else { cdlg.DoModal(); }*/ if(dlg.st)//闹铃已经设立 { cdlg.DoModal(); } }2,设立闹铃时间voidCClock3Dlg::OnClockSettime(){ //TODO:Addyourcommandhandlercodehere dlg.DoModal(); if(dlg.st)//闹铃已经设立,激活查看闹铃时间菜单项 { GetMenu()->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION|MF_ENABLED); //保存闹铃时间,便于查看 cdlg.m_c_hour=dlg.m_hour; cdlg.m_c_minute=dlg.m_minute; cdlg.m_c_second=dlg.m_second; }}3,退出设立闹铃对话框voidCClock3Dlg::OnEXIT(){ //TODO:Addyourcontrolnotificationhandlercodehere //OnSysCommand(SC_MINIMIZE,SC_SCREENSAVE);//framework中使用 //intsetmusic=MessageBox("您拟定不设立铃声?","温馨提示",MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON2); radioDlg.m_checked=0;//设立默认选项 radioDlg.DoModal(); //if(radioDlg.m_checked!=BST_CHECKED)//没有被抑制 if(0==radioDlg.m_checked)//第一种单选按钮被选中 { ShowWindow(SW_HIDE); } else { EndDialog(1); }}4,程序初始设立SetTimer(1,1000,0);//1000ms触发一次 //闹铃尚未设立,禁用查看闹铃时间菜单项 if(!dlg.st) { //MessageBox("闹铃尚未设立!","温馨提示",MB_OK|MB_ICONEXCLAMATION); GetMenu()->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED); } //设立铃声开/关标记菜单项 bsound=TRUE; bend=FALSE;//铃声与否播放完 if(bsound) { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_UNCHECKED); } else { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_UNCHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_CHECKED); } //出错了 /*CTimedate; CStringdate1; date1.Format("%d%d%d",date.GetYear(),date.GetMonth(),date.GetDay()); SetDlgItemText(IDC_STATIC_DATE,date1);//把日期显示在控件上*/ SYSTEMTIME sysTime;GetLocalTime(&sysTime);CStringstrMsg; strMsg.Format("今天是:%d年%d月%d日",sysTime.wYear,sysTime.wMonth,sysTime.wDay); //MessageBox(strMsg); SetDlgItemText(IDC_STATIC_DATE,strMsg);//把日期显示在控件上*/5,关闭闹钟声音菜单选项voidCClock3Dlg::OnSoundOff(){ //TODO:Addyourcommandhandlercodehere bsound=FALSE; if(!bsound) { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_UNCHECKED); } else { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_UNCHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_CHECKED); }}6,启动闹钟声音菜单选项voidCClock3Dlg::OnSoundOn(){ //TODO:Addyourcommandhandlercodehere bsound=TRUE; if(bsound) { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_UNCHECKED); } else { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_UNCHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_CHECKED); }}7,闹铃时间到弹出窗口函数voidCClock3Dlg::OnTimer(UINTnIDEvent){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CTimetime=CTime::GetCurrentTime(); CStringtime1; staticintcount=0; //inta=dlg.m_minute; //SetDlgItemInt(IDC_EDIT1,a,FALSE);//无符号数输出 time1=time.Format("%H时%M分%S秒"); SetDlgItemText(IDC_STATIC_currenttime,time1);//把系统时间显示在控件上 if(!bsound) { PlaySound(NULL,NULL,NULL);//关闭铃声 } if(time.GetHour()==dlg.m_hour&&time.GetMinute()==dlg.m_minute&&time.GetSecond()==dlg.m_second) { if(bsound) { bend=PlaySound(dlg.music,NULL,SND_FILENAME|SND_ASYNC); MessageBox("闹铃时间到了!\n\n铃声:"+dlg.music,"温馨提示"); } else { PlaySound(NULL,NULL,NULL); MessageBox("闹铃时间到了!\n\n铃声已关!","温馨提示"); } count=0;//从0开始计数 } count++; if(bend&&(0==count%340)) { PlaySound(NULL,NULL,NULL);//铃声播放完,释放内存 bend=FALSE; } CDialog::OnTimer(nIDEvent);}8,calendarcontrol控件,光标转到今天voidCClock3Dlg::OnToday(){ //TODO:Addyourcontrolnotificationhandlercodehere //转到今天 //withaCOleDateTime/*COleDateTimedt1(1998,3,15,0,0,0);m_monthc.SetCurSel(dt1);*///withaCTime/*CTimedt2(1998,3,15,0,0,0);m_monthc.SetCurSel(dt2);*///withaSYSTEMTIMEstructureSYSTEMTIMEsysTime;//seteverythingtozeromemset(&sysTime,0,sizeof(sysTime));GetLocalTime(&sysTime);//exceptforthedatewewant//sysTime.wYear=1998;//sysTime.wMonth=3;//sysTime.wDay=15;m_monthc.SetCurSel(&sysTime);}9,初始化设立时间函数BOOLCSettimeDlg::OnInitDialog(){ CDialog::OnInitDialog(); //TODO:Addextrainitializationhere //长度限制/* m_sthour.SetLimitText(2); m_stminute.SetLimitText(2); m_stsecond.SetLimitText(2);*//* m_hour=0; m_minute=0; m_second=0;*/ m_btnSetMusic.SetIcon(IDI_ICON2,(int)BTNST_AUTO_GRAY); m_btnSetMusic.DrawBorder(FALSE); music=""; bsetmusic=FALSE; CStringstr=""; for(inti=0;i<24;i++) { str.Format("%02d",i); m_cmbHour.AddString(str); } m_cmbHour.SetCurSel(0); for(intj=0;j<60;j++) { str.Format("%02d",j); m_cmbMinute.AddString(str); } m_cmbMinute.SetCurSel(0); for(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度喷漆车间生产效益提升合同3篇
- 2024年度工业材料采购合同合同样本版
- 2024互利采购伙伴关系框架协议版
- 2024版设备采购合同标的质量保证和服务支持3篇
- 金泉别墅租赁合同三篇
- 雇用劳动合同书三篇
- 二零二四版工程招投标代理合同3篇
- 2024年度定制生日蛋糕预付费卡销售合同一
- 2024年度奶茶店市场营销合同3篇
- 2024年借款居间协议格式样本版B版
- 《中国传统民族服饰》课件
- 2024年中考语文试题分类汇编:非连续性文本阅读
- 遥远的救世主读书分享2
- 浙江省温州市2024-2025学年高三上学期一模英语试题 含解析
- 2024年R1快开门式压力容器操作证考试题库及答案
- 专项12-全等模型-手拉手-专题训练
- 2024年山西航空产业集团有限公司招聘笔试参考题库附带答案详解
- 学校(幼儿园)每周食品安全排查治理报告(整学期16篇)
- 医学生科研思路的培养(72张幻灯片)课件
- 夫妻离婚财产分割浅析法学毕业论文
- 青岛市住宅工程质量通病防治手册
评论
0/150
提交评论