电子闹钟设计说明书一、实现的功能一个简单的电子闹钟设计程序,和一般的闹钟的功能差不多。
首先此程序能够同步电脑上的显示时间,保证时间的准确性;24小时制,可以根据自己喜欢的铃声设置闹钟提示音,还能自己设置提示语句,如“时间到了该起床了”,“大懒虫,天亮了,该起床了”等等,所以这是一个集实用和趣味于一体的小程序。
二、设计步骤1、打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名张卢锐的闹钟及其所在位置,点击确定,如图所示。
2、将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图所示。
然后一直点下一步,最后点完成,就建立了一个基于对话窗口的程序框架,如图所示。
3、下面是计算器的界面设计在控件的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,以显示小时的窗口为例,如图所示,在该对话框中输入ID属性。
在控件的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,以数字按钮打开为例,如图所示,在该对话框中输入控件的ID值和标题属性。
按照上面的操作过程编辑其他按钮对象的属性。
表1 各按钮和编辑框等对象的属性对象ID 标题或说明编辑框IDC_HOUR 输入定时的整点时间编辑框IDC_MINUTE 输入定时的分钟数编辑框IDC_FILE 链接提示应所在地址编辑框IDC_WARING 自己编辑显示文本按钮IDC_OPEN 打开按钮IDC_IDOK 闹钟开始按钮IDC_CHANGE 重新输入静态文本IDC_STATIC 界面上的静态文本,如时,分,备注完成后界面如图所示。
4、连接变量和代码1)、给编辑框连接变量。
在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFC ClassWizard 对话框,选择Member Variables选项卡,如图所示。
2)、给按钮连接代码(以打开按键为例)给打开按钮连接代码。
在打开按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择Messages Maps选项卡,然后在Object IDs列表框中选择IDC_HOUR,在Messages 列表框中选择BN_CLICKED项,即选择单击按钮事件,如图所示。
三、关键部分的代码1、获取电脑时间和输入定时时间代码:if(onoff==TRUE){CTime time;CString strtime,m_stime;time=CTime::GetCurrentTime();strtime=time.Format("%H%M"); //获取电脑时间m_stime=m_hour+m_minute; //自己输入时间if(m_stime==strtime){onoff=FALSE;OnOpenMusic();OnTingle();MessageBox(m_waring);}}2、打开提示音音乐文件代码:void CAlarmclockDlg::OnOpenMusic(){//SHELLEXECUTEINFO shell = { sizeof(shell) };shell.fMask = SEE_MASK_FLAG_DDEW AIT;shell.lpVerb = "open";shell.lpFile = m_file;shell.nShow = SW_SHOWNORMAL;BOOL ret = ShellExecuteEx(&shell);//打开音乐文件}3、到达设定时间点闹钟提醒程序:void CAlarmclockDlg::OnTray(){NOTIFYICONDATA nid;nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);nid.hWnd=this->m_hWnd;nid.uID=IDR_MAINFRAME;nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME) );strcpy(nid.szTip,"闹钟提醒");//信息提示条为“计划任务提醒”Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标4、计划任务提醒代码:void CAlarmclockDlg::OnTray(){NOTIFYICONDATA nid;nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);nid.hWnd=this->m_hWnd;nid.uID=IDR_MAINFRAME;nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME) );strcpy(nid.szTip,"闹钟提醒");//信息提示条为“计划任务提醒”Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标5、抖动完成以后回到起始位置放置乱跑和抖动圈数代码:void CAlarmclockDlg::OnTingle(){ShowWindow(SW_SHOWNORMAL);CPoint CurrentPos; //抖完还要回到这个位置,不要乱跑。
CRect rect; //这一段计算主要是为了满足SetWindowPos()的参数要求…不解释吧GetClientRect(&rect);ClientToScreen(&rect);CurrentPos.x = rect.left;CurrentPos.y = rect.top;int FrameWidth;int FrameHight;int CaptionHight; //我当前系统设置上这三个值分别为3,3,22FrameWidth = GetSystemMetrics(SM_CXFIXEDFRAME);FrameHight = GetSystemMetrics(SM_CYFIXEDFRAME);CaptionHight = GetSystemMetrics(SM_CYCAPTION); //这是个好函数//这里需要将CurrentPos坐标offset()到主窗口左上角坐标CurrentPos.Offset(-FrameWidth, -CaptionHight-FrameHight); //实现抖动: 半个小圈+ 三个大圈+ 半个小圈SetWindowPos(&wndTopMost,CurrentPos.x-1,CurrentPos.y-2,0,0, SWP_NOSIZE);Sleep(10);//上面的SWP_NOSIZE参数忽略cx,cy,故可置0SetWindowPos(&wndTopMost,CurrentPos.x-4,CurrentPos.y-4,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x-7,CurrentPos.y-2,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x-8,CurrentPos.y,0,0, SWP_NOSIZE);Sleep(10);int i = 0;for (;i<7;i++) //想抖几圈就改几{SetWindowPos(&wndTopMost,CurrentPos.x-6,CurrentPos.y+6,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x,CurrentPos.y+8,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x+6,CurrentPos.y+6,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x+8,CurrentPos.y,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x+6,CurrentPos.y-6,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x,CurrentPos.y-8,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x-6,CurrentPos.y-6,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x-8,CurrentPos.y,0,0, SWP_NOSIZE);Sleep(10);}SetWindowPos(&wndTopMost,CurrentPos.x-7,CurrentPos.y+2,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x-4,CurrentPos.y+4,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x-1,CurrentPos.y+2,0,0, SWP_NOSIZE);Sleep(10);SetWindowPos(&wndTopMost,CurrentPos.x,CurrentPos.y,0,0, SWP_NOSIZE);6、测试计算器的功能1.程序主界面2、输入15:10,选择打开音乐文件,和提示语句,运行结果如下提示音乐会由相应的播放器开始播放,执行效果很不错。