当前位置:文档之家› MFC实现简单的小闹钟

MFC实现简单的小闹钟

10
播放声音
❖ 加入Mmsystem.h头文件。 ❖ 加入winmm.lib文件。可以在工程中设置,也可以在文件中
加入以下语句: #pragma comment(lib,"winmm.lib") ❖ 用PlaySound()函数播放声音。
11
最小化到托盘
❖ 把程序放到托盘上的本质就是先在托盘区绘制一个图标,然 后把程序隐藏不见,再对托盘的图标进行消息处理,就可以 了。 绘制图标以及确定图标所传送消息的函数只有一个, 那就是——— WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid );
nIDEvent)中加入响应函数, 捕获nIDEvent==1的那个 WM_TIMER,并响铃,然 后KillTimer(1)关掉定时 器时器。
8
定时保存的问题
❖ 由于第一个功能是设置定 时器,设定的时间可能是 很多天之后,而应用程序 不可能保证一直运行到很 多天之后,所以必须要保 存用户设定的时间,每次 启动时自动读入这个时间, 继续上次定时。
14
然后就是在CPP文件中加入函数onShowTask的实现了:
15
实现情况
❖ 基本功能实现。但是不是很实用,每次定时之后要么保持程 序一直运行,要么在设定时间到达之前手动开启才能听到闹 铃。
解决方案的设想: 1.设置开机启动,让程序自动运行。 2.设置任务计划,在特定的时间开启程序。
❖ 这个函数负责向系统传递消息,以添加、修改或删除托盘区 的图标。
12
❖ 这个函数里面首先给NOTIFYICONDATA赋值,然后调用 shell_NotifyIcon, 头一个参数是NIM_ADD,表示添加。然 后用函数ShowWindow 隐藏主窗口,这样,就实现了将程
序最小化到系统托盘区的任务了。 13
❖ 需求分析 ❖ 实现过程 ❖ 实现情况
内容概要
1
需求分析
❖ 程序功能: 实现一个小闹钟。 首先有两个标签页(CTabCtrl控件类),一个标签是
定时器,设定好时间和提示音乐后点击OK,当设定 的时间到达后(可以使用CTime类),提示音乐响 起;另一个标签是倒计时器,设定好倒计时的秒数, 点击OK后便开始倒计时(使用WM_TIMER消息来 实现计时),当倒计时减小到0时,提示音乐响起。
定义一个CUserData类, 用来保存设定时间和 wav路径等信息
9
❖ 如何将这个类写入文件保存呢?通过查询msdn得知,将一 个类永久保存,也就是实现类的串行化(sariallization), 有以下五个步骤:
一.将你的类从CObject继承。 二.重载serialize这个成员函数。 三.在类的声明里面加上DECLARE_SERIAL这个宏 四.定义一个没有争议的默认构造函数。 五.在类的实现文件里加入IMPLEMENT_SERIAL这个宏。
6
CTabCtrl的使用
❖ 1)在资源管理器中创建几个Dialog, 分别生成相应的类 (基于CDialog),注意,要设置Dialog的Style为 “Child”, Border为“None”。
❖ 2)在CDialog::OnInitDialog中,调用 CTabCtrl::InsertItem(...)方法添加几个页面 。
❖ 取得用户设定的秒数 second。
❖ 每隔一秒钟发送一次
❖ SetTimer(1,second*1000,
WM_TIMER消息。
NULL);
SetTimer(0,1000,NULL); ❖ 在OnTimer(UINT_PTR
❖ 在OnTimer(UINT_PTR nIDEvent)中加入响应函数, 捕获nIDEvent==0的那个 WM_TIMER,并判断当前 时间是否等于设定时间。
❖ 3)用create方法创建对话框,使用资源中定义的模板,并 将他们的父窗口设为CTabCtrl,并调整大小和位置。
❖ 4)在主窗口中,捕获Tab Control的页选择事件,在其中 对索引值进行分类,然后就显示你的对话框,注意显示一个 的同时,要隐藏其他的对话框。
7
定时器的实现
倒计时的实现
❖ 定义一个CTime变量,保 存用户设定的时间。
在头文件的//{{AFX_MSG和//}}AFX_MSG之间声明消息响应 函数: afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam); 然后在CPP文件中添加消息映射。 在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP 之间 加入: ON_MESSAGE(WM_SHOWTASK,onShowTask) 将消息和消息响应函数映射起来。
点击会出现如下界面:
当所有设置完成后,点击OK按键,则设定生效, 同时,该标签页内的所有设置相关的控件都变灰, 为不可用状态。“OK”变为“Cancel”。点 击”Cancel“,则恢复可设置状态,同时, “Cancel”也变回为原来的”OK“。
5
实现过程
❖ 一.CTabCtrl的使用。 ❖ 二.定时的实现. ❖ 三.定时保存的实现. ❖ 四.播放声音 ❖ 五.最小化到托盘.
❖ 程序已经最小化到托盘区了,但是呢,对托盘图标的操作如何进行呢? 这就体现了结构NOTIFYICONDATA的成员uCallbackMessage 的作用 了。它所提供的作用就是,当用户用鼠标点击托盘区的图标的时候(无 论是左键还是右键),会向hWnd所代表的窗口传送消息,如果是上例, 消息的名称就是WM_SHOWTASK。根据VC的消息机制,对自定义消 息增加消息响应函数。
2
主界面如下
3
“倒计时器”标签下的控件与“定时器”标签下的控件大致相同。 点击“Browse…”会弹出如下界面(请使用CfileDialog):
4
选择一个文件后,文件路径出现在“Browse…”左边的编辑框 里,也可以直接在该编辑框中手动输入音乐文件的路径。主界 面中的“Set Timer:”下的编辑框是一个CDataTimeCtrl控件,
相关主题