我做了个程序,我的想法是:当程序执行到某处时,暂停60秒,然后再继续往下执行,关键是在这暂停的60秒时间里,我想设置个倒计时器来显示这60秒时间,请问高手该如何实现呢?
解决方案 »
- 急,跪求各位大侠
- pWnd->WindowProc()?
- 关于manifest程序的部署3
- 如何将透明位图画到按钮上?
- 查锚点,使用IHTMLAnchorElement出问题了?
- 新丁求一个完整的Socket程序。
- 请问,在双网卡多IP的服务器上,如何编程指定UDP服务器接受端的本地IP?(搜到过一篇发送端的帖子,但好象没人回答?)
- 做一个类似于ftp的程序,服务器那里没有自己写的侦听,就只有ftp服务,要去下载文件,怎么办?
- 请教各位大侠,关于多线程的一个问题
- 我的机子装不了2000.我用我的硬盘在别人的机子上装是好的。....
- ■■■如何手动(纯代码)创建窗体■■■
- 要使用 INT8U 应该包含什么头文件
在一个static中设置倒计时的数字 从60开始 响应一次OnTimer 减少一
当数字为零时继续向下执行另一种
就是做一个for循环 循环60次
没循环一次 sleep(1000) 一秒
不过这样会造成程序假死 可以考虑放到一个线程里面去
请问如何设置一个Timer呢?是SetTimer(0, 1000, NULL);这样吗?但如何使它停在当前,执行倒计时呢?
如果函数成功,则返回新定时器的标识符。应用程序可以将这个值传递给KillTimer成员函数以销毁定时器。如果成功,则返回非零值;否则返回0。参数: nIDEvent 指定了不为零的定时器标识符。
nElapse 指定了定时值;以毫秒为单位。
lpfnTimer 指定了应用程序提供的TimerProc回调函数的地址,该函数被用于处理WM_TIMER消息。如果这个参数为NULL,则WM_TIMER消息被放入应用程序的消息队列并由CWnd对象来处理。
CWnd::OnTimerafx_msg void OnTimer( UINT nIDEvent );参数: nIDEvent 指定定时器的标识符。 说明:
当在SetTimer成员函数中指定的每一个时间间隔都被用来安装一个定时器之后,框架调用这个成员函数。
当在应用程序的消息队列中没有其它的消息时,Windows函数DispatchMessage发送一个WM_TIMER消息。
注意 框架调用这个成员函数来使你的应用程序可以处理一个Windows消息。传递给你的函数的参数反映了在消息收到时框架收到的参数。如果你调用了这个函数的基类实现,这个实现将使用最初随着消息传递过来的参数,而不是使用你提供给函数的参数。在OnTimer下处理 倒计时功能 即刷新显示那个 static控件的显示
==========================================
在消息驱动的window下这种想法本身就不合理
{
m_strinfo.Format("%d",i);//m_strinfo关联一个static控件 CString类型
UpdateData(FALSE);
Sleep(1000);
}
只是这个时候 程序是处于假死状态的
添加一个WM_TIMER消息
用一个函数SetTimer(1,1000,NULL);在开始进入倒计时的事件中添加!
第一个参数表示标示符,第二个时间间隔/ms,第三个回调函数,
然后在事件响应函数中加一个如下代码:
void CSetTimerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(1==nIDEvent)
{
i--;
CString str;
str.Format("%d",i);
m_Timer=str;
UpdateData(FALSE);
}
CDialog::OnTimer(nIDEvent);
}
便可以出现一个倒时间!
===================
如果是想执行到60秒后退出,然后显示倒计时并不难,直接用定时器,隔一秒输出一次,同时加一个全局变量,此时设这个变量为TRUE,而所有的用户的输入的消息处理函数中根据这个变量的值做相应处理,发现为TRUE时,这些消息处理函数就什么都不做。
{
Sleep(1000);
Display();
}未编译,参考吧。
SetTimer(1,1000,NULL) ; //启动倒计时定时器//在OnTimer中
Static int ntime = 60 ; //倒计时开始数值
CString strtime ; //记录倒计时数值的字符串if(ntime>=0) //如果倒计时没结束
{
strtime.Format("%d",ntime) ;
GetDlgItem()->SetWiIDC_STATIC_TIMEndowText(strtime) ; //IDC_STATIC_TIME为显示倒计时的静态文本控件
ntime-- ;
}
else //倒计时结束
{
... //60秒结束后要执行的操作放在这里
}//上面只是个想法,没测试,楼主可以试试