回调函数的问题

textnext 2005-10-04 11:00:57
CEdit控件声明了一个 int m_s;变量,应该是局域变量。
Dialog初始化了
m_s=0;
SetTimer(1, 1000, TimerProc);

声明定义了回调函数TimerProc(),定义的TimerProc()如下:

VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
m_s++;
UpdateData(FALSE);
}


运行程序m_s和UpdateData没有定义,我想问一下TimerProc()中怎么使用其它局域变量
...全文
138 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawk_1982 2005-10-05
  • 打赏
  • 举报
回复
无论是CEdit还是CDialog都是从CWnd派生的,所以它们都可以处理WM_TIMER消息,所以大部分情况可以调用OnTimer()函数来处理.关键是看你需要使用哪个对象的时间消息处理函数.所以你没有必要自己写一个回调函数.
由于楼主给的信息太少,所以我只能猜测楼主是在一个对话框上建立一个CEdit空间,然后每隔一定时间将'm_s' 的值输出到控间上,而你写的代码是在对话框域的范围内,因为m_s是CEdit控件类的成员函数,所以自然有'm_s' : is not a member of 'CDialog'这样一个错误.
所以将所有的m_s改为:CEdit对象名.m_s,当然你必须把m_s声明成public.
textnext 2005-10-04
  • 打赏
  • 举报
回复
呵呵,谢谢忠告。

不过问题归问题,SetTimer()的回调代码网络上资料太少了。
gagool 2005-10-04
  • 打赏
  • 举报
回复
@_@
textnext(最爱秋天) 给你一个忠告,在没有掌握C++前最好不要碰MFC,不然完全是浪费时间。
textnext 2005-10-04
  • 打赏
  • 举报
回复
剩下一个错误了: 'm_s' : is not a member of 'CDialog'
textnext 2005-10-04
  • 打赏
  • 举报
回复
class CAbc1Dlg : public CDialog
{
// Construction
public:
CDialog* g_pDlg;


这个不是全局变量吧。
qiulg 2005-10-04
  • 打赏
  • 举报
回复
必须知道变量所在的对象, 才可用局部变量.

用一个全局变量来存放对象的指针把,
比如声明一个全局变量CDialog* g_pDlg;在Dialog初始化的时候
g_pDlg = this;

VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
g_pDlg->m_s++;
g_pDlg->UpdateData(FALSE);
}

16,548

社区成员

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

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

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