MFC如何在对话框内加入计时器并实时显示出来?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC如何在对话框内加入计时器并实时显示出来?相关的知识,希望对你有一定的参考价值。

按下开始按钮计时从0开始,按下结束后计时结束。
用何控件?添加何种消息响应?以及主要函数是什么?
谢谢!

用WM_TIMER函数,让窗体每隔多少毫秒通知你的函数更新一下计时。

更新完计时后,你可以调用WM_PAINT消息,让CDC在窗体上面画出计时信息。追问

我的思路是设置一个SetTimer(1,1000,NULL);每一秒钟调用一次OnTimer函数,一个变量初始化为00:00:00,每次增加一秒,并显示在一个编辑控件内,可是为什么只显示00:00:00,之后就不能增加了(已经考虑到了仅在第一次调用时初始化为0)

追答

你显示的是CEdit控件吗?用它的SetWindowText就可以改变其字符串了。走读下你的代码,看看OnTimer是不是每次都刷新控件了。

参考技术A UpdateData(false);

MFC编辑框数据实时更新问题!!求解答!!!

其中一段代码如下
for (i = 0; i < gener; i++)

ClearAllSeries(); //清图
m_CurrenG = i + 1; //获得当前迭代数,m_CurrenG为编辑框的变量
UpdateData(false); //更新显示
..
...
...
.(中间计算程序省略)

我遇到的问题是:m_CurrenG对应的编辑框显示不能实时更新,要在for循环最后一个循环结束后才更新,显示最终的结果,为什么啊?怎样才能实时地更新?

参考技术A 在VC里,很多情况下需要更新控件,也就是调用UpdateData(FALSE);
但是如果是在循环中调用该函数,会导致没有时间来刷新界面,消息得不到相应,从外部看来,似乎整个循环只执行了一次UpdateData(FALSE);如下面的例子
for(i = 0;i < m;i++)

m_yiducishu = i+1;
UpdateData(FALSE);


这种写法会导致界面没有时间更新。
根据牛人的指点,在代码上添加一点东西,就可以了.如下:

for(i = 0;i < m;i++)

m_yiducishu = i+1;
UpdateData(FALSE);
///////////////////////////
MSG msg;
while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )

TranslateMessage(&msg);
DispatchMessage(&msg);

///////////////////////////////

自己推动消息循环就ok了。本回答被提问者采纳

以上是关于MFC如何在对话框内加入计时器并实时显示出来?的主要内容,如果未能解决你的问题,请参考以下文章

MFC,实现消息框自动倒计时的功能...

vcmfc定时器

2创建MFC应用程序——基于对话框,时间计时器

在给定时间段后关闭或放弃 MFC 对话框

如何使用 MFC 在 CWinApp 中接收计时器事件?

如何在 C++ 中使用计时器在给定时间内强制输入?