刚学MFC,想做一个倒计时器,下面为部分代码,ToSecond和ToTimeFormat
是秒和时间字符串的转换。大神们知道问题出在哪里吗?
void CTimerDlg::OnBnClickedBegin()
{
// TODO: 在此添加控件通知处理程序代码
CString szTimeFormat;
GetDlgItemText(IDC_IN, szTimeFormat);
SetDlgItemText(IDC_OUT, szTimeFormat);
iSecond = ToSecond(szTimeFormat);
SetTimer(ID_TIMER, 1000, NULL);
}
void CTimerDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnTimer(nIDEvent);
CString szTimeFormat;
if (iSecond == -1)
{
return;
}
while (iSecond >= 0)
{
szTimeFormat = ToTimeFormat(iSecond);
SetDlgItemText(IDC_OUT, szTimeFormat);
}
iSecond--;
}
void CTimerDlg::OnBnClickedStop()
{
// TODO: 在此添加控件通知处理程序代码
KillTimer(ID_TIMER);
}
代码不多,慢慢调。
首先需要定位代码在哪里出问题了。
出现了什么问题,贴出来
你的这个错误 看起来不像是代码的错误啊,你注释掉 SetTimer之后会正常是吧?
如果是这样的话 你试一下 不要用MFC的 SetTimer 用win32的看会不会正常, 如果win32的正常,就应该是你的编译环境问题。
目前从你贴的代码来看 好像不是代码的问题
把iSecond = ToSecond(szTimeFormat);改成 iSecond=100, 然后在void CTimerDlg::OnTimer(UINT_PTR nIDEvent)的第一行设断点,看看进去不
while (iSecond >= 0)
{
szTimeFormat = ToTimeFormat(iSecond);
SetDlgItemText(IDC_OUT, szTimeFormat);
}
改成
while (iSecond >= 0)
{
szTimeFormat = ToTimeFormat(iSecond);
SetDlgItemText(IDC_OUT, szTimeFormat);
--iSecond;
}
试一试