当前位置: 代码迷 >> VC/MFC >> visual studio 2013 以及 2015 community 中 定时器报错有关问题
  详细解决方案

visual studio 2013 以及 2015 community 中 定时器报错有关问题

热度:155   发布时间:2016-05-02 03:40:01.0
visual studio 2013 以及 2015 community 中 定时器报错问题
问题描述:
        在用visual C++ 2013 中的MFC开发一个项目的时候,遇到用定时器,按照教程在构造函数和析构函数中设置,如下,

CMFCApplication1View::CMFCApplication1View()
{
// TODO: 在此处添加构造代码

SetTimer(1, 10, NULL);

}

CMFCApplication1View::~CMFCApplication1View()
{
KillTimer(1);
}

并采用MFC自己的类向导添加事件处理程序,但是总是报错,如图


一步一步调试的方式发现在SetTimer的获取窗口的指针出错。
这是为什么? 有高手遇到这个问题吗。昨天晚上在Visual Studio 2015 上也存在这个问题。请问,我的用法错了吗?
即使将SetTimer(1, 10, NULL); 放在
BOOL CMFCApplication1View::PreCreateWindow(CREATESTRUCT& cs)
中,也不行。 


------解决思路----------------------
那时候窗口还没创建出来

重写OnInitialUpdate函数,放到这里面试试
------解决思路----------------------
构造函数里面还没有完成窗体跟上面控件的创建呢,当然不会报错

可以在oninitdialog中用

------解决思路----------------------
setTimer要放在Init()函数或者其他后续函数里
KillTimer可以不写的
------解决思路----------------------
在视图的OnInitialUpdate中SetTimer
------解决思路----------------------
在OnInitialUpdate或者oninitdialog函数中SetTimer的说法太绝对(这样会导致程序一运行便把timer打开),应该是在需要启动定时器时才打开timer,例如放到按钮的响应函数中。另,放到PreCreateWindow里面是错误的,因为此时窗口还没创建出来。
  相关解决方案