「C++ MFC」 “多媒体定时器实例”讲解
一、前言
本博客在MFC工程中,完成了对创建多媒体定时器和读文档功能的应用。
二、技术实现
首先要包含MMSystem.h头文件,还要添加以下代码 #pragma comment(lib,"winmm.lib")
创建多媒体定时器由四个函数合作完成:
- 执行创建:CreateTimer();
- 执行回调:TimeProc();
- 执行内容:OnTimer();
- 执行销毁:DestroyTimer();
1. 创建函数 CreateTimer()
使用这个函数创建一个多媒体定时器
UINT CMy11Dlg::CreateTimer()
{//create the timeryte+89+121741 01234 // Create a periodic timertimeBeginPeriod(1); timerID = timeSetEvent(1,1,TimeProc,(DWORD)this,TIME_PERIODIC); return timerID;}
(1)timeBeginPeriod(1); //开始一个新段,当使用多个‘多媒体定时器’时,()内的数字不能重复;
(2)启动多媒体定时器函数。
MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, WORD dwUser, UINT fuEvent )
参数说明:
- uDelay:以毫秒指定时的周期
- Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
- LpTimeProc:指向一个回调函数,该回调函数包含需要定时执行的代码。
- DwUser:存放用户提供的回调数据。
- FuEvent:指定定时器事件类型:
- TIME_ONESHOT:uDelay毫秒后只产生一次事件。
- TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。
2. 回调函数:TimeProc()
每一次多媒体定时器循环都会从这个函数开始,所以我们叫它回调函数。
void CALLBACK CMy11Dlg::TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{CMy11Dlg* pdcpackerdlg = (CMy11Dlg*)dwUser;
m_num++;
pdcpackerdlg->m_number=m_num;
pdcpackerdlg->OnTimer(1); //之所以有数字1,是因为你可以把它内部设置成switch选择框架}
(1)函数原型:
void CALLBACK TimeProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 );
对于应用程序定义的函数名TimeProc为一个占位符。
(2)参数:
- uID:时间事件标识符,当定时器被建立时,timerSetEcent函数返回该标识符。
- uMsg:保留,未使用。
- dwUser:由timeSetEvent函数的dwUser参数提供的用户实例数据。
- dw1 and dw2 :保留字,未使用。
*应用程序不能从回调函数内部调用系统定义的函数,除了PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent.TimeKillEvent, midiOutShortMsg, midiOutLongMsg和OutpuitDebugString。
3. 执行函数:OnTimer()
把你希望多媒体定时器循环执行的内容写在这个函数内。这里执行函数的名字你可以自定义,并不一定要以OnTimer()为名。
void CMy11Dlg::OnTimer(UINT nIDEvent)
{// TODO: Add your message handler code here and/or call defaultswitch (nIDEvent){case 1:{Sim_Data_Write<<TestData[0]<<" "<<TestData[1]<<" "<<TestData[2]<<" "<<TestData[3]<<" "<< TestData[4]<<" "<<TestData[5]<<" "<<TestData[6]<<" "<<TestData[7]<<" "<<TestData[8]<<" "<<endl;CString str;str.Format("%d",m_number);GetDlgItem(IDC_EDIT1)->SetWindowText(str); CString str1;str1.Format("%f",TestData[0]);GetDlgItem(IDC_test0)->SetWindowText(str1); CString str2;str2.Format("%f",TestData[1]);GetDlgItem(IDC_test1)->SetWindowText(str2); CString str3;str3.Format("%f",TestData[8]);GetDlgItem(IDC_test8)->SetWindowText(str3); break;}}CDialog::OnTimer(nIDEvent);}
这里我们执行的内容是,读取一个.txt文件,并将文件中的内容显示到MFC界面内。
4. 销毁函数:DestroyTimer()
执行此函数后将停止多媒体定时器循环,并销毁此定时器。
void CMy11Dlg::DestroyTimer()
{timeKillEvent(timerID);timeEndPeriod(1);
}
例程执行结果:
至此,一个完整的多媒体定时器例程就创建完毕了,注意不要忘记添加多媒体定时器的头文件。
小白将一个完整的例程放在这里,上面的代码也均来自此例程
链接:Robot_Starscream的资源
功能包括:多媒体定时器、.txt文档读操作。
「C++ MFC」 “多媒体定时器实例”讲解相关推荐
- 「 C++ MFC 」“读取.txt文档实例”讲解
一.前言 本博客在MFC工程中,完成了对"读取.txt文档"功能的实战. 二.技术实现 整个程序分为三个过程:开始读文档.应用文档和停止读文档. 1. 开始读文档 ...
- Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一
原文来源:arxiv 作者:Alexander Kirillov.Kaiming He1.Ross Girshick.Carsten Rother.Piotr Dollar 「雷克世界」编译:嗯~阿童 ...
- canvas换图时候会闪烁_基于Canvas实现的高斯模糊(上)「JS篇」
作者:iNahoo 转发链接:https://mp.weixin.qq.com/s/5TxPjznpEBku_ybSMBdnfw 目录 基于Canvas实现的高斯模糊(上)「JS篇」本篇 基于Canv ...
- node 压缩图片_推荐10个常用的图片处理小帮手(下)「值得收藏」
作者: semlinker 转发链接:https://mp.weixin.qq.com/s/i3ynTtPJOECoAYfqHFoo3Q 前言 本文给小伙伴们隆重介绍用于图片处理的十个 「" ...
- 「 C++ TwinCAT3 」倍福 “ADS通讯技术及工程实例”研究
一.前言 本博客在具体的工程中,实现 Visual Studio(简称"上位机") 与 TwinCAT(简称"下位机") 之间的 ADS通讯,通过ADS通讯完成 ...
- 养老e周刊创始人孙黎:16000字讲解「互联网+养老」需要面对的难题
嘉宾介绍 孙黎,连续7年养老和家庭生活服务领域创业,曾联合创立云家政和陪爸妈,累计融资3000万+人民币对中国式养老有深刻理解,曾为10万+家庭提供养老服务的解决方案,对活力/失能老人的需求产品化有7 ...
- 全网最详细笔记:张益唐北大讲解火热出炉!本质上已证明「零点猜想」
视学算法报道 编辑:编辑部 [导读]关于「零点猜想」问题,大海里的针我没捞到, 但海底地貌我探得差不多了. 一支马克笔,一张小白板. 刚刚,张益唐教授现身北大,在B站的直播平台上,给广大网友上 ...
- 全网最详细笔记:张益唐北大讲解火热出炉!证明「零点猜想」!
本文 新智元 公众号授权 编辑部 [导读]关于「零点猜想」问题,大海里的针我没捞到, 但海底地貌我探得差不多了. 一支马克笔,一张小白板. 刚刚,张益唐教授现身北大,在B站的直播平台上,给广大网友上 ...
- 「网络创业家」变「网络发明家」的3个新网站实例
「发明家」是那位名垂千古的伟大爱迪生,而「创业家」只是隔壁那个中辍找不到工作只好开点的阿狗,我们只敢认自己为「创业家」,不敢「升级」为「发明家」 .但,网络其实还蛮适合「发明」的. 周末看到一个我认为 ...
最新文章
- 千万QPS毫秒响应:快手数据中台建设实践
- 每天一个linux命令(49):at命令
- 【转】修改static控件背景颜色和文字颜色
- 中断linux命令快捷键_基于Linux终端命令行的快捷键的详细解析
- 电商峰值系统架构设计
- 基于SSM框架的毕业设计管理系统的设计与实现(附资源下载)
- easyexcel导出excel文件之图片导出
- 前端单点登录(SSO)
- 推荐一个Firefox的扩展——IE Tab
- 机器人周志_智能机器人杂志
- HACKTHEBOX——Starting Point Tier0
- 软著申请--学生以学校名义申请软著
- 对于光本身,光走一光年的距离需要多久?————狭义相对论-钟慢效应(时间膨胀)
- Placing Lampposts UVA - 10859 放置街灯 树形dp
- python获取文件夹名称、文件名、去除后缀的文件名、文件改名等
- 楼层标高怎么引上去_楼层标高怎么引上去
- 12大主流平板电脑CPU主控方案平台及其生产厂商
- 微信商城小程序 带java后台源码
- 泥石流与滑坡的遥感解译特征
- 158:vue+openlayers 地图上Echarts模拟飞机循环飞行
热门文章
- 什么是TCP/IP协议?
- 怎么重装服务器的系统,怎么重装服务器操作系统
- 在linux上gc日志详解,JVM Parallel Scavenge GC日志详解
- HDU 5761 Rower Bo
- notify()和notifyAll()的区别
- IC 产品的质量与可靠性测试
- 南宁市第二十六中学:教研路漫漫,花香伴我行
- matlab relieff函数,数据挖掘 ReliefF和K-means算法的应用
- MapGuide空间参考系API
- android 7原生动态壁纸,手机里都是定制OS?谷歌Android 7.0原生系统壁纸邀你来尝鲜!...