问题描述:
在用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里面是错误的,因为此时窗口还没创建出来。