软件设计报告—南京邮电大学—mfc—计算器,万年历.doc_第1页
软件设计报告—南京邮电大学—mfc—计算器,万年历.doc_第2页
软件设计报告—南京邮电大学—mfc—计算器,万年历.doc_第3页
软件设计报告—南京邮电大学—mfc—计算器,万年历.doc_第4页
软件设计报告—南京邮电大学—mfc—计算器,万年历.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信与信息工程学院软件设计报告南 京 邮 电 大 学通信与信息工程学院软件设计报告 学 生 学 号B08020221学 生 姓 名孟祥熙二零一零 年 九 月目 录前 言2题目一 P030M21、问题分析。22、设计方案。33、流程图。44、测试数据、测试结果、结果分析。45、相关运行界面。56、关键代码5题目二 W003E81、问题分析。82、设计方案。83、流程图。94、测试数据、测试结果、结果分析。105、相关运行界面。106、关键代码11题目三 R018M121、问题分析。122、设计方案。123、流程图。134、测试数据、测试结果、结果分析。155、相关运行界面。156、关键代码16题目四 P033H201、问题分析。212、设计方案。213、流程图。224、测试数据、测试结果、结果分析。235、相关运行界面。256、关键代码26小结26附录37前 言这次软件设计课程的两周时间里,不但使我的编程水平在实用方面有了很大的提升,更重要的是,让我对编程,c+有了更广阔和深入的认识。了解了mfc,了解了可视化窗口的建立,及控件的实用方法。Mfc的学习,能将我们的编程知识真正应用到实用中去,例如我本人后来做的单片机串口显示温度的上位机,就利用了MSCOMM的插件。 在选题,搜索查找资料的过程中,我们接触到了之前在课堂中并未接触过的方向。通过图书馆,网络,我们对资料查找的能力得到锻炼,学到了很多有关算法和编程的方法,让我们得到了这样的意识,学会跟资料沟通跟学好基本知识一样重要,并且是我们编程思想的源泉。并且,在这个新技术层出不穷的年代,仅仅掌握一套东西是不够的,要大胆去尝试,去学习新的东西,才能不被淘汰。 好程序,只有想到所有可能发生的状况才能达到完美,经过一遍遍测试,考虑各种情况,调试,一个程序才能被人信任。一个学生才能有底气的像验收的老师演示自己的程序。虽然我还是考虑了很多状况,但是由于初识mfc,时间紧促,所以有的情况虽然想到了但实现起来还是有些力不从心,我会利用课余时间继续这段时间来对mfc的学习。题目一 P030M1、问题分析。一,题目:编程实现一个简易计算器,实现基本的加减乘除运算功能。在计算器的面板上,有09数字的按钮,同时还有加减乘除的运算按钮已经清空运算框按钮,用户可以直接点击面板进行输入数字并计算。输入和输出结果数据共用一个文本框,同时,当进行除法运算时当除数为0,计算器会给出错误提示。二,实现方法:建立一个mfc工程,添加一个编辑框及按钮若干,分别表示加,减,乘,除,及清除,等于,及0-9的数字键,通过鼠标点击数字button或者用键盘上的数字键直接在编辑框中输入需要运算的数;用鼠标点击窗口上的运算符号来输入需要进行的运算,并在编辑框中显示输入及输出结果。或者按“清除”键重置之前的输入。由于编辑框输入的数据不能赋给一个整形的变量,所以我们需要用字符型的一维数组用来保存需要在编辑框输入输出的数据,在进行运算的时候,我们还要将数组转化成整形整数才能进行正常的加减乘除运算。所以,需要用到atoi,和itoa两个转换函数。计算器应该有除零报错的功能,例如windows xp中计算器除零后输出:除数不能为零。所以,这个是计算器所必须有的功能,虽然在给老师的验收中,这个功能并没有实现,但是通过修改代码,现在这个功能可以实现了。三,拓展:考虑到程序的健壮性,我们应该考虑到有不按“数符号数等于”的按键组合,一次运算之后会不会对后面的计算产生影响等,这个我们要在具体设计之中考虑2、设计方案。定义三个字符型数组ch1,ch2ch3,用来存储两个在编辑框中输入的运算数,和一个要在编辑框中输出的结果。定义一个字符型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函数直接输出“divider cannot be 0”,用if(!flag)来控制正常结果输出的过程,使之不被运行。当除数num2不为0的时候,所有运算都可以正常运行,并且在switch中用num3来保存两个数的运算结果,这时flag没有变化。然后我们用atoi函数将num3转化为能在编辑框中输出的数组格式ch3,最后用SetDlgItemText函数将结果显示到编辑框上,运算完成。另外,当我们按下“清空”键的时候,将编辑框上的数字或者错误提示清空,这样再按下符号键或者等于的时候不会有反映。3、 流程图。开始存入输入框内数字ch1是否按清空YN将运算键保存到m_FH将ch1数转换为num1,清屏Y是否按清空在编辑框上输出Divider cannot be 0N存入输入框内数字ch2,将ch2转换为num2num2=0m_FH=/ Y Num3=num2(m_FH)num1将num3转化为ch3 NY N在编辑框上输出ch3结束4、测试数据、测试结果、结果分析。用户输入:“69”“/”“3”“=”输出结果:23用户输入:“10000000”“*”“清空”“”“64”“/”“8”“=”输出结果:8用户输入:“5096”“*”“564”“-”“550”“=”输出结果:14用户输入:“12”“/”“0”“=”输出结果:divider cannot be 0结果分析:当除数为零的时候结果输出divider cannot be 0,提醒用户输入错误,当输入“数字运算符号数字运算符号等于”的时候,第二个输入数被作为正常输入模式的第一个输入数进行运算,结果是第二个数和第三个数之间的运算结果。5、相关运行界面。 普通计算: 除数为0:6、关键代码数字键函数示例:void CDlgDlg:OnButton1() m_edit.ReplaceSel(1);void CDlgDlg:OnButton2() m_edit.ReplaceSel(2);运算符号键函数示例:void CDlgDlg:OnBtnadd() /点击加法操作在这里进行CString str;if(GetDlgItemText(IDC_BTNADD,str),str=+)m_FH = +;/将“+”号操作符保存GetDlgItemText(IDC_EDIT1,ch1,10);num1 = atoi(ch1);SetDlgItemText(IDC_EDIT1,);void CDlgDlg:OnBtndiv() /点击除法操作CString str;if(GetDlgItemText(IDC_BTNDIV,str),str=/)m_FH = /;GetDlgItemText(IDC_EDIT1,ch1,10);num1 = atoi(ch1);SetDlgItemText(IDC_EDIT1,);等号键运算函数:void CDlgDlg:OnBtnequ() /在这里进行运算选择,输出计算结果UpdateData();int flag=0;/作为判断除数是否为0的标记GetDlgItemText(IDC_EDIT1,ch2,10);num2 = atoi(ch2);/转换ch2为num2switch (m_FH)case +:num3 = num1+num2;break;case -:num3 = num1-num2;break;case *:num3 = num1*num2;break;case /:if(num2=0)/判断除数是否为0flag=1;SetDlgItemText(IDC_EDIT1,divider cannot be 0);/输出错误提示elsenum3 = num1/num2;break;if(!flag)/判断是否出现0除数,如果不是,进行结果的输出itoa(num3,ch3,10);SetDlgItemText(IDC_EDIT1,ch3);/把num3转化成字符串ch3 UpdateData(false);清空键函数:void CDlgDlg:OnBtncls() SetDlgItemText(IDC_EDIT1,);题目二 W003E 1、问题分析。一,题目:编制程序实现字符串的逆转功能。要求具有友好的输入、输出界面。如输入This is a test 输出 tset a si sihT。这是一个简单题,我们在这道题中需要将字符串的顺序逆转。二,实现方法:这道题我们可以从三个方面入手:1,我们可以将一个编辑框输入的字符串或数字串赋给这个数组,然后计算这个字符串的长度(strlen),交换首尾字符,最后在另一个编辑框中输出。2,我们可以定义两个一维字符型数组,计算输入编辑框内的字符的长度,并将输入框内的字符串倒叙赋给第二个字符串,在编辑框中输出第二个数组。3,最后的方法是最简单的也是最省系统资源的,因为根本用不到算法,我们只需将输出的编辑框的光标始终在最前端,这样我们输入正的字符就直接被转换成倒叙的了。三,拓展:题目要求字符串逆转,如果我们定义char的话,同样可以实现数字串的逆转和数字字符混合字串的逆转。当然,如果用第三种方法的话可以实现任意语句的逆转。2、设计方案。首先新建一个mfc单窗口工程,然后添加两个窗口,并加字标注:输入窗口,输出窗口。方法1:定义两个一维字符型数组buf1100,buf2100,分别用于存储输入及倒叙之后的字符语句,输入后,计算buf1所存字符长度的大小,定义i,j,用for循环将bufi从最后一个字节往前,知道第一个,顺序赋给buf2j。然后在输出框更新buf2。方法2:只定义一个字符型数组buf,和字符变量temp。用于存储输入的字符语句,和参与完成交换运算,定义i,j,用for循环按顺序将最后一个和第一个交换,用第二个和倒数第二个交换.到中间一个数时停止操作,并输出新的buf。方法3:在重载函数OnChangeEdit1()加入属性,让光标始终停留在最前边,这样直接显示倒叙字符,并且能倒叙所有语句。3、流程图。方法1: 开始输入字符串 N 长度合格 Y Buf1=字符串i=strlen(buf1)J=0 YI=jBuf1(i)buf(j)交换 i-,j+ 输出字符串buf1 结束方法2: 开始输入字符串 N 长度合格 Y Buf1=字符串i=strlen(buf1)J=0 YI=0Buf2(i)=buf2(j) i-,j+ 输出字符串buf2 结束4、测试数据、测试结果、结果分析。根据方法2:用户输入:This is TEST输出结果:tseT si sihT用户输入:1234567890输出结果:0987654321用户输入:!#$%&*()_+输出结果:+_)(*&%$#!结果分析:用户输入的除汉字以外的字符都被存储在buf1内,倒叙存入buf2中输出。5、相关运行界面。6、 关键代码方法1:char buf1100,temp;/定义中间变量m_x.GetWindowText(buf1,100);UpdateData(false); int j=0;for (int i = strlen(buf1)-1; i = j; i-)temp=buf1j;buf1j=buf1i;buf1i=temp; j+; m_y=buf1;UpdateData(false);方法2:char buf1100,buf2100;/定义两个数组m_x.GetWindowText(buf1,100);/将输入赋给buf1UpdateData(false); int j=0; for (int i = strlen(buf1)-1; i = 0; i-)/从后道前将buf1的值赋给buf2 buf2j=buf1i; j+; buf2j=0; m_y=buf2;/输出UpdateData(false);方法3:在函数OnChangeEdit1()中加入如下语句CEdit* edit =(CEdit*)GetDlgItem(IDC_EDIT1);edit- SetSel(0,0,TRUE); 题目三 P031M1、 问题分析。一,题目:利用VC中的Treeview和Listview,做一个自己的资源管理器,左侧的树状目录可以关闭,当点击一个文件夹时右侧的Listview中会显示文件夹的内容。尽量模仿windows的资源管理器的功能,比如左侧文件夹图标的变化和右侧listview中可以显示“列表”,“详细资料”。二,实现方式:我们可以建立一个mfc 的sdi,然后在其中加入treeview和listview控件,并且设置其起始点为我的电脑及桌面,按照windows的资源管理器,我们应该设置一个我的电脑的起始位置,但是为了方便,我们应该加上桌面的位置。这样我们可以在左侧的树状结构中观察现在所处的路径,并在右侧的窗口查看当前文件夹中的内容。这样,就实现了一个简易的资源管理器。三,扩展:在资源管理器中我们不能只能用来看,应该在listview里面加入粘贴,复制,剪切,删除功能,这才是一个可以称得上实用的资源管理器,为了实现这个功能,我们应该重载listview的控件。加入粘贴,复制,剪切,删除的函数,并且在菜单里面加入相关的借口,这样才能达到实用其次,我们可以加入一个编辑框,令其有如下功能:当输入路径并按下旁边的转到按钮,就可以在右侧listview显示输入路径内的内容,并且在左侧的treeview中显示所输入路径的节点。2、设计方案。建立一个mfc的sdi,创建 TreeView 控件,通过设置属性与调用方法对各 Node 对象进行操作,由于这些操作包括添加、删除、对齐和其它操作,我们可以适当修改使其符合我们的要求。可以编程展开与折回 Node 对象来显示或隐藏所有子节点。我们可以用Collapse、Expand 和 NodeClick 三个事件实现此功能。Node 对象使用 Root、Parent、Child、FirstSibling、Next、Previous 和 LastSibling 属性。在代码中可通过检索对 Node 对象的引用,从而在树上定位。也可以使用键盘定位。UP ARROW 键和 DOWN ARROW 键向下循环穿过所有展开的 Node 对象。从左到右、从上到下地选择 Node 对象。若在树的底部,选择便跳回树的顶部,必要时滚动窗口。RIGHT ARROW 键和 LEFT ARROW 键也穿过所有展开的 Node 对象,但是如果选择了未展开的 Node之后再按 RIGHT ARROW 键,该 Node 便展开;第二次按该键,选择将移向下一个 Node。相反,若扩展的 Node 有焦点,这时再按 LEFT ARROW 键,该 Node 便折回。如果按下 ANSI 字符集 中的键,焦点将跳转至以那个字母开头的最近的 Node。后续的按该键的动作将使选择向下循环,穿过以那个字母开头的所有展开节点。 ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目。还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示。另外,还可管理列表中项目的排序方法和选定项目的外观。3、 流程图。文件操作示例:删除一个文件的流程图开始按下右键删除键strSrcPath = strSelItemPath;将删除文件的地址赋给strSrcPath删除strSelItemPath下的节点的内容弹出对话框,显示“文件删除失败”弹出对话框,显示“文件删除成功”strSrcPath=0 Y N结束在输入框中输入地址,并转到:开始在编辑框中取输入的地址,赋给m_strURLYm_strURL=0 Nm_btnReDirect.EnableWindow(TURE);m_strURL存入字符串urlij,i=0,j=0没有遇到/0I+J+N没遇到/ YYa=0;检查urla存在NYA=j?NY N报错:“URL isnt exist!”清空编辑框设置Tree.SetFolder函数的变量为strURL,将当前位置变为输入的URL结束4、 测试数据、测试结果、结果分析。操作一:输入:打开左侧的我的电脑打开c盘打开haha文件夹在一个文件上点击复制再点击左面的桌面点击菜单栏编辑粘贴结果:弹出对话框黏贴成功操作二:打开桌面点击刚才复制到桌面的文件点击右键删除结果:弹出对话框删除成功操作三:在编辑框输入:“c:/360download”点击转到结果:右侧展开360download的文件夹中内容测试分析:要求的结果和自己添加的功能都能正常实现。5、 相关运行界面。转到:右键:删除示例:6、关键代码编辑框函数:void CMyExplorerDlg:OnChangeUrl() UpdateData(TRUE);if(m_strURL.GetLength() = 0) /编辑框内无内容m_btnReDirect.EnableWindow(FALSE);else m_btnReDirect.EnableWindow(TRUE);/编辑框内有内容,则打开“转到”按钮函数:void CMyExplorerDlg:OnRedirect() UpdateData(TRUE);if(m_strURL.GetLength() m_wndTree.SetFolder(m_strURL);/将当前目录设为m_strURL重载treeview函数,加入以下操作函数:void CDirListCtrl:OnEditCopy() /复制strSrcPath = strSelItemPath;strDesPath = ;nOption = 1;void CDirListCtrl:OnEidtCut() /剪切strSrcPath = strSelItemPath;strDesPath = ;nOption = 2;void CDirListCtrl:OnEditPaste() /粘贴strDesPath = m_strPath;CString msg;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);else if(nOption = 2) if(MoveFile(strSrcPath,strDesPath) msg += 文件移动成功!;MessageBox(msg);else msg += 文件移动失败!;MessageBox(msg);void CDirListCtrl:OnEditDelete() /删除strSrcPath = strSelItemPath;CString msg;msg += 源文件:;msg += strSrcPath;msg += n;if(DeleteFile(strSrcPath) msg += 文件删除成功!;MessageBox(msg);else msg += 文件删除失败!;MessageBox(msg);在OnInitDialog函数中加入:/添加菜单CMenu * m_Menu = new CMenu;m_Menu-LoadMenu(IDR_MENU_MAINFRAME);SetMenu(m_Menu);/改变窗口位置CRect rect(0,0,800,600);MoveWindow(&rect);m_wndTree.MoveWindow(10 ,40,250,490);m_wndList.MoveWindow(260,40,520,490);m_wndTree.Initialize();Treeview的初始函数:void CDirTreeCtrl:Initialize()LPITEMIDLIST itemlist;char buf256;int iDesktopIcon;int iComputerIcon;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函数来播放系统音乐,作为闹钟的铃声,这里,我们也可以应用之前编资源管理器的经验来处理自定义铃声的选择。首先,我们要定义个窗口:其一,显示时间,日期,年月(calendar control),时间跟系统时间同步其二,通过菜单栏弹出的设置闹钟时间的窗口,这里我们加入自定义铃声功能,我们就要加入一个编辑框,和按钮。将闹钟的位置存入变量。其三,闹钟时间到的时候弹出用来提醒用户“时间到”的弹出窗口。其四,我们可以设计一个窗口,通过他我们可以让用户看到之前设置的闹钟时间。三,扩展:题目中需要我们的闹钟应该音乐报时,为了增强软件的功能,我们可以在程序设计中加入自定义铃声的功能。其次,我们可以设计一个窗口,通过点击菜单中的相应项,能让我们查看到之前设置的闹钟时间。最后,我们还可以加入设置多个闹铃的功能,让用户能设置几个闹钟时间。2、 设计方案。闹钟一共可分为三个模块:1、设置闹钟,2、提醒,3、退出;而设置闹钟又可分为:1、设置闹钟音乐,2、设置闹钟时间;设置闹钟时间又有添加,删除和修改三种操作。闹钟设置闹钟提醒设置闹钟时间设置闹钟音乐添加修改删除退出 通过函数调用获取系统时间,在主页面相应编辑区显示,调用子函数闹钟设定模块录入闹钟时间,通过设置计时器定时比较设置时间与系统时间,并确定响应函数,实现闹钟的发声,弹出提示页面。根据查找,获取时间可以用API函数GetSystemTime,或者CTime的函数GetCurrentTime 同时,我们需要用PlaySound函数来播放系统音乐,作为闹钟的铃声,这里,我们也可以应用之前编资源管理器的经验来处理自定义铃声的选择。3、流程图。 主 页 面 设定闹钟显示模拟时钟显示时间响应闹钟北京时间西安时间关系视图:CLOCK类视图资源视图文件视图关于闹钟应用主页模版主页关于框一闹钟主页框一主流程图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、关键代码一,主框架 BOOL CClock2App:InitInstance() /主页面初始化 CClock2Module _Module; /建立模板LONG CClock2Module:Unlock() /撤销BOOL CClock2App:InitATL() /初始化ATLCAdd_Alarm:CAdd_Alarm(CWnd* pParent /*=NULL*/): CDialog(CAdd_Alarm:IDD, pParent) /构造函数,以基本对话框为基类,调用其构造函数。 BOOL CClock2Dlg:OnInitDialog()/ 初始化对话框 void CAdd_Alarm:DoDataExchange(CDataExchange* pDX) /传入父类文件指针,实现对数据的校验。BEGIN_MESSAGE_MAP(CAdd_Alarm, CDialog) /获取消息void CAdd_Alarm:OnOK() /主页面OK键消息响应void CClock2Dlg:OnSysCommand(UINT nID, LPARAM lParam) /消息传递及响应 void CClock2Dlg:OnButton2()/按钮响应实现闹钟设定void CClock2Dlg:OnButton3()/按钮响应实现闹钟删除二,系统主要实现代码介绍 ( 选取代码片段 )1,检测闹钟是否设置 void CClock3Dlg:OnClockCheck() / TODO: Add your command handler code here/用对话框提示闹铃未设置/*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,设置闹铃时间void CClock3Dlg:OnClockSettime() / TODO: Add your command handler code heredlg.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,退出设置闹铃对话框void CClock3Dlg:OnEXIT() / TODO: Add your control notification handler code here/OnSysCommand(SC_MINIMIZE, SC_SCREENSAVE); /framework中使用/int setmusic = 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); elseEndDialog(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);elseGetMenu()-GetSubMenu(1)-CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND | MF_UNCHECKED);GetMenu()-GetSubMenu(1)-CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND | MF_CHECKED);/出错了/*CTime date;CString date1;date1.Format(%d %d %d ,date.GetYear(),date.GetMonth(),date.GetDay();SetDlgItemText(IDC_STATIC_DATE,date1); /把日期显示在控件上*/SYSTEMTIMEsysTime; GetLocalTime(&sysTime); CString strMsg; strMsg.Format(今天是: %d年 %d月 %d日,sysTime.wYear,sysTime.wMonth, sysTime.wDay); /MessageBox(strMsg); SetDlgItemText(IDC_STATIC_DATE,strMsg); /把日期显示在控件上*/5,关闭闹钟声音的菜单选项void CClock3Dlg:OnSoundOff() / TODO: Add your command handler code herebsound = 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);elseGetMenu()-GetSubMenu(1)-CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND | MF_UNCHECKED);GetMenu()-GetSubMenu(1)-CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND | MF_CHECKED); 6,开启闹钟声音的菜单选项void CClock3Dlg:OnSoundOn() / TODO: Add your command handler code herebsound = 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);elseGetMenu()-GetSubMenu(1)-CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND | MF_UNCHECKED);GetMenu()-GetSubMenu(1)-CheckMenuItem(ID_SOUND_OFF,MF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论