请教settimer/ontimer

DJM12345678 2009-10-15 11:17:37
各位大侠:
SetTimer和OnTimer到底怎么配合使用阿,谢谢了
void CTesttimerDlg::OnOK()
{

UINT m_nTimer = SetTimer(1,5000,NULL);

}

void CTesttimerDlg::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 1: ///处理ID为24的定时器
MessageBox("test");
break;

}
CDialog::OnTimer(nIDEvent);
}


我点“确定”也就是执行OnOK(),怎么不是隔5秒 弹出一个test 窗口
...全文
130 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2009-10-15
  • 打赏
  • 举报
回复
SetTimer时间有点不准的,可以考虑使用高精度计时器
goodsss 2009-10-15
  • 打赏
  • 举报
回复

UINT m_nTimer = SetTimer(1,5000,NULL);
timer对象不能实现精确定时控制,只能根据系统运行资源状况得到一个模糊的控制精度;
可以采用 下面的途径去控制;

System.DateTime.Now.TimeOfDay.Ticks
goodsss 2009-10-15
  • 打赏
  • 举报
回复
UINT m_nTimer = SetTimer(1,5000,NULL);
timer对象不能实现精确定时控制,只能根据系统运行资源状况得到一个模糊的控制精度;
可以采用
你妹的特盗不 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 djm12345678 的回复:]
我这里是 点 “确定”就立刻弹出 “test",然后就完事了
另外,我想知道 Ontimer(),在哪调用阿 ,从代码看 没调用 它阿,怎么执行的
[/Quote]

SetTimer()指定了时间,然后时间到,就会发送 WM_TIMER消息,然后你的OnTImer绑定了这个消息
DJM12345678 2009-10-15
  • 打赏
  • 举报
回复
你们怎么实现的,把代码贴这,我看看,十分感谢!
你妹的特盗不 2009-10-15
  • 打赏
  • 举报
回复
void CTesttimerDlg::OnOK()
不要用这个名字啊
下面这样就ok

void Ctest1Dlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
SetTimer(1,5000,NULL);
//OnOK(); 没有mark你看下有什么效果
}

void Ctest1Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
MessageBox(_T("test"),0,0);
break;
default :
break;
}


CDialog::OnTimer(nIDEvent);
}

fishion 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishion 的回复:]
前提是你要把MessageBox关闭了才行,因为MessageBox没关闭就不会往下执行,也就是不会再弹出来
[/Quote]
呵呵,原来是这样 ,那楼主所以的不是隔5秒弹出,是因为用SetTimer设置的时间不是准确的,不能做到完全是隔5秒就会执行一次
DJM12345678 2009-10-15
  • 打赏
  • 举报
回复
我这里是 点 “确定”就立刻弹出 “test",然后就完事了
另外,我想知道 Ontimer(),在哪调用阿 ,从代码看 没调用 它阿,怎么执行的
你妹的特盗不 2009-10-15
  • 打赏
  • 举报
回复
ONOK是什么函数啊,这个函数是梆定了那个确定键,默认的dialog 呼叫这个函数后就直接退出
yuhudie203 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishion 的回复:]
前提是你要把MessageBox关闭了才行,因为MessageBox没关闭就不会往下执行,也就是不会再弹出来
[/Quote]
不关闭也可以……
幸福官 2009-10-15
  • 打赏
  • 举报
回复
间隔的确是5秒啊,还是楼上解答的正确
yuhudie203 2009-10-15
  • 打赏
  • 举报
回复
我试了下 可以弹出啊 唯一的区别是前面没有你那个UINT m_nTimer =
但是我想和那没关系 你跟下代码看看
fishion 2009-10-15
  • 打赏
  • 举报
回复
前提是你要把MessageBox关闭了才行,因为MessageBox没关闭就不会往下执行,也就是不会再弹出来
快乐鹦鹉 2009-10-15
  • 打赏
  • 举报
回复
那是隔多少?
你妹的特盗不 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lfs09 的回复:]
void CTesttimerDlg::OnOK()
不要用这个名字啊
下面这样就ok
C/C++ codevoid Ctest1Dlg::OnBnClickedButton1()
{// TODO: Add your control notification handler code here SetTimer(1,5000,NULL);//OnOK(); 没有mark你看下有什么效果}void Ctest1Dlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: Add your message handler code here and/or call defaultswitch(nIDEvent)
{case1:
MessageBox(_T("test"),0,0);break;default :break;
}


CDialog::OnTimer(nIDEvent);
}
[/Quote]

OnBnClickedButton1() 这个函数会响应button的单击消息啊
ON_BN_CLICKED(IDC_BUTTON1, &Ctest1Dlg::OnBnClickedButton1)
是button id
afx_msg void OnBnClickedButton1();
huqinglu123 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 djm12345678 的回复:]
OnTimer 需要声明吗
[/Quote]
这个函数是通过应用程序向导添加的,直接写函数体
DJM12345678 2009-10-15
  • 打赏
  • 举报
回复
void CTest1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
SetTimer(1,5000,NULL);
//OnOK(); mark
}

void CTest1Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
MessageBox(_T("test"),0,0);
break;
default :
break;
}


CDialog::OnTimer(nIDEvent);
}
我是这样写的,没有任何效果
DJM12345678 2009-10-15
  • 打赏
  • 举报
回复
OnTimer 需要声明吗
DJM12345678 2009-10-15
  • 打赏
  • 举报
回复
OnBnClicked 这个button要设置什么属性吗,我按你的写法还是没有实现阿

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧