资源描述
电子闹钟设计说明书
一、实现功效
一个简单电子闹钟设计程序,和通常闹钟功效差不多。首先此程序能够同时电脑上显示时间,确保时间正确性;二十四小时制,能够依据自己喜爱铃声设置闹钟提醒音,还能自己设置提醒语句,如“时间到了该起床了”,“大懒虫,天亮了,该起床了”等等,所以这是一个集实用和趣味于一体小程序。
二、设计步骤
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_DDEWAIT;
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,22
FrameWidth = 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,故可置0
SetWindowPos(&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,选择打开音乐文件,和提醒语句,运行结果以下
提醒音乐会由对应播放器开始播放,实施效果很不错。
展开阅读全文