'OnTimer' : member function not declared in

liuyang1943 2009-11-18 04:53:06
初学VC,做一个绘图程序,在添加定时器的时候编译不能通过,提示:'OnTimer' : member function not declared in 'CHellowordView'
下面是相关代码:
void CHellowordView::OnTimer(UINT_PTR nIDEvent)
{
SetTimer(1,1000,NULL);

}

我google了下说是要重新加入的WM_TIMER的消息映射,不是很明白应该怎么做,哪位前辈指点下好吗?
...全文
894 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyworld2288 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 paerxiushi 的回复:]
首先在CHellowordView类声明中加入消息声明:
class CHellowordView
{
protected:
afx_msg void OnTimer(UINT_PTR nIDEvent);
}
然后在CHellowordView类源文件中添加消息映射:
BEGIN_MESSAGE_MAP(CHellowordView, CView)
ON_WM_TIMER()
...
END_MESSAGE_MAP()
最后添加函数体:
void CHellowordView::OnTimer(UINT_PTR nIDEvent)
{

}
这下对了。
要设置定时器时,调用SetTimer(120,100,NULL);
删除定时器,调用KillTimer(120);

[/Quote]
你要在相应的窗口或者dialog类里面创建一个WM_TIMER消息,在OnTimer(UINT_PTR nIDEvent)添加事件相应,
你不能自己写一个和OnTimer(UINT_PTR nIDEvent)同样名字的函数来忽悠编译器,那样是不行的。
tingfenghe 2009-11-18
  • 打赏
  • 举报
回复
检查一下位置有没有写错,如果没错就是上面的问题了
paerxiushi 2009-11-18
  • 打赏
  • 举报
回复
首先在CHellowordView类声明中加入消息声明:
class CHellowordView
{
protected:
afx_msg void OnTimer(UINT_PTR nIDEvent);
}
然后在CHellowordView类源文件中添加消息映射:
BEGIN_MESSAGE_MAP(CHellowordView, CView)
ON_WM_TIMER()
...
END_MESSAGE_MAP()
最后添加函数体:
void CHellowordView::OnTimer(UINT_PTR nIDEvent)
{

}
这下对了。
要设置定时器时,调用SetTimer(120,100,NULL);
删除定时器,调用KillTimer(120);
paerxiushi 2009-11-18
  • 打赏
  • 举报
回复
笔误而已,把第5楼中的OnTime全部换成OnTimer
maple_zhj 2009-11-18
  • 打赏
  • 举报
回复
窗口类,
本身都有 定时器 功能的。

不是窗口类的,也可以自行用API实现 定时器 功能的。
paerxiushi 2009-11-18
  • 打赏
  • 举报
回复
你看看,我给你的代码是OnTime,而你的错误提示却说是OnTimer函数没有声明,显然之前原来的OnTimer函数体没有清除掉。另外,要想使消息映射有效,在CHellowordView类声明体中加入这句
DECLARE_MESSAGE_MAP()
yaozhiyong110 2009-11-18
  • 打赏
  • 举报
回复
public 声明OnTimer试试
yaozhiyong110 2009-11-18
  • 打赏
  • 举报
回复
没问题 我做过
类里面声明了吗?
有3个步骤哦

一 在类里声明

二 加消息映射

三 函数实现
liuyang1943 2009-11-18
  • 打赏
  • 举报
回复
另外我看到一些例子是在dialog中实现OnTimer函数,而我是在hellowordView.cpp中设置的定时器以及函数,这样没问题吧
liuyang1943 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 paerxiushi 的回复:]
首先在CHellowordView类声明中加入消息声明:
class CHellowordView
{
protected:
afx_msg void OnTime();
}
然后在CHellowordView类源文件中添加消息映射:
BEGIN_MESSAGE_MAP(CHellowordView, CView)
ON_WM_TIMER()
...
END_MESSAGE_MAP()
最后添加函数体:
**********************hellowordView.h********************************
void CHellowordView::OnTime()
{

}

[/Quote]
我添加后的函数如下:
class CHellowordView : public CView
{
protected:
CHellowordView();
DECLARE_DYNCREATE(CHellowordView)
afx_msg void OnTime();


public:
CHellowordDoc* GetDocument();


public:
...
..
****************************hellowordCView.CPP************************
BEGIN_MESSAGE_MAP(CHellowordView, CView)
ON_WM_TIMER()

END_MESSAGE_MAP()
...



*******************************************************************************8
结果仍然提示:
'OnTimer' : member function not declared in 'CHellowordView'
yaozhiyong110 2009-11-18
  • 打赏
  • 举报
回复
我说的用代码。。。。。

意思是直接代码添加,不需要vc++2005 环境做什么事了


在类声明处添加 函数声明

类实现部分消息映射添加响应

最后函数实现
yaozhiyong110 2009-11-18
  • 打赏
  • 举报
回复
6.0用类向导添加
2005在类属性里的消息 WM_TIMER 点右边下拉列表 默认是OnTimer

用代码先在声明的地方 afx_msg void OnTimer(UINT_PTR nIDEvent);

消息映射的地方
BEGIN_MESSAGE_MAP(CAdoTextDlg, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()

最后函数实现
void 类名::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CDialog::OnTimer(nIDEvent);
}

05和6.0 参数不一样 不过用法一样
paerxiushi 2009-11-18
  • 打赏
  • 举报
回复
首先在CHellowordView类声明中加入消息声明:
class CHellowordView
{
protected:
afx_msg void OnTime();
}
然后在CHellowordView类源文件中添加消息映射:
BEGIN_MESSAGE_MAP(CHellowordView, CView)
ON_WM_TIMER()
...
END_MESSAGE_MAP()
最后添加函数体:
void CHellowordView::OnTime()
{

}
qq14923349 2009-11-18
  • 打赏
  • 举报
回复
ctrl +W
调出向导·····

这个很简单的啊
添加消息

ONTIMER?忘记了
liuyang1943 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq14923349 的回复:]
我晕

定时器很简单的

WM_TIME
好像有这个
添加了就是
[/Quote]

具体怎么添加呢
liuchui2009 2009-11-18
  • 打赏
  • 举报
回复
重载一下吧
qq14923349 2009-11-18
  • 打赏
  • 举报
回复
我晕

定时器很简单的

WM_TIME
好像有这个
添加了就是

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧