标签:计时器 多媒体计时器 timesetevent vc++ c++
MFC 工程有自带WM_TIME计时器,但是精度低
这里讲多媒体计时器函数timeSetEvent的方法,也是一个c语言下的通用方法
多媒体计时器需要用到的头文件和静态库文件有
#include <windows.h>
#pragma comment(lib,"Winmm.lib")
#include <MMSystem.h>
左边是子对话框,右边是父对话框
父对子的控制模式见上一篇文章用对话框指针来控制创建关闭和清除子对话框
在子cpp下,创建一个用来被调用的全局函数
void PASCAL fun(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
//PASCAL 等同于CALLBACK
{
CMy0611ADlg* fatherDlg=(CMy0611ADlg*)::theApp.GetMainWnd();
//将对话框类函数引入这个全局函数内 这是父对话框指针
Cson* sonDlg=(Cson*)fatherDlg->m_son;
//这是子对话框指针
if(sonDlg->control_key==123)
//control_key是子框的成员变量 用来控制停止计时器
{
::timeKillEvent(sonDlg->m_timeHandle);
}
CString str=(char*)dwUser;
//将参数类型转变一下
sonDlg->addStr(str);
//一个子框类的功能成员函数,不需要关注
}
子cpp下
多媒体计时器按钮被按下后的函数
void Cson::OnBnClickedButton3()
{
char buf[]="sdffadfa";
if((this->m_timeHandle = timeSetEvent(100, 1,fun,(DWORD_PTR)buf,TIME_PERIODIC)) == 0)//周期调用定时处理函数 此行必须看懂 核心所在
{
CString str="error!\n";
this->SetDlgItemTextA(IDC_STATIC2,str);
}
else
{
CString str;
str.Format("%d",this->m_timeHandle);
str="ok!\nTimerID="+str+"\n";
this->SetDlgItemTextA(IDC_STATIC2,str);
}
}
子的析构函数 用来保证子框被删除前要关闭计时器
Cson::~Cson()
{
::timeKillEvent(this->m_timeHandle);
}
父框通过控制子框的成员变量来间接关闭计时器 (其实也可以直接用全局函数关闭,)
void CMy0611ADlg::OnBnClickedButton3()
{
this->m_son->control_key=123;
}
标签:计时器 多媒体计时器 timesetevent vc++ c++
原文地址:http://blog.csdn.net/mfmfmmf1/article/details/46458323