imeminemywo
2016-12-18 11:45
采纳率: 100%
浏览 1.7k
已采纳

MFC 中SetTimer OnTimer KillTimer 的使用

刚学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);

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • newasoft 2016-12-18 16:54
    已采纳

    代码不多,慢慢调。
    首先需要定位代码在哪里出问题了。

    点赞 评论
  • qq_31258245 2016-12-18 12:04

    出现了什么问题,贴出来

    点赞 评论
  • imeminemywo 2016-12-18 12:16

    调试过了SetTimer后就这样了图片说明

    点赞 评论
  • imeminemywo 2016-12-18 12:19

    ![图片说明
    ![图片说明
    !图片说明
    !图片说明

    点赞 评论
  • imeminemywo 2016-12-18 12:20

    直接运行就卡住了图片说明

    点赞 评论
  • nanjun520 2016-12-19 01:22

    你的这个错误 看起来不像是代码的错误啊,你注释掉 SetTimer之后会正常是吧?
    如果是这样的话 你试一下 不要用MFC的 SetTimer 用win32的看会不会正常, 如果win32的正常,就应该是你的编译环境问题。
    目前从你贴的代码来看 好像不是代码的问题

    点赞 评论
  • tang_cheng 2016-12-19 02:45

    把iSecond = ToSecond(szTimeFormat);改成 iSecond=100, 然后在void CTimerDlg::OnTimer(UINT_PTR nIDEvent)的第一行设断点,看看进去不

    点赞 评论
  • louie_chen 2016-12-21 16:25

    while (iSecond >= 0)
    {
    szTimeFormat = ToTimeFormat(iSecond);
    SetDlgItemText(IDC_OUT, szTimeFormat);
    }
    改成
    while (iSecond >= 0)
    {
    szTimeFormat = ToTimeFormat(iSecond);
    SetDlgItemText(IDC_OUT, szTimeFormat);
    --iSecond;
    }

    试一试

    点赞 评论