从CWnd派生了一个类添加了定时器消息处理但无法通过

韦翔罂 2009-08-31 10:23:09
我从CWnd派生了一个类,并给这个类添加了定时器消息处理,但在SetTimer(id,interval,NULL)这个函数调用的地方无法通过,总是弹出程序终止的对话框并终止了程序。
单步调试发现是在SetTimer(id,interval,NULL)这个函数调用的地方,进入到AFXWIN2.INL文件,在其中的“ASSERT(::IsWindow(m_hWnd));”这一句就发生了上面的现象。
是不是因为m_hWnd为空或者它的值不是一个窗口所以才会这样的?(当然,在实际运行中这个变量的值确实是空的,因为没必要给它赋值哦。难道一定要给它赋值吗?)
请高手指点!
...全文
142 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyangdn 2009-08-31
  • 打赏
  • 举报
回复
你的Handle是无效的,先CWnd创建出来, new一下还不够,要Create
参考
BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
fandh 2009-08-31
  • 打赏
  • 举报
回复
你继承的是窗口类,肯定要有窗口创建后,才能使用!
xylicon 2009-08-31
  • 打赏
  • 举报
回复
ASSERT(::IsWindow(m_hWnd))断言代表窗口没创建成功。必须创建了才行。lz,m_hWnd为空当然不行了。
woshishao 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dirdirdir3 的回复:]
有窗口才能处理消息,没有创建窗口的话settimer就显得没有意义了.............
[/Quote]
回答的太好了!
njlengjiang 2009-08-31
  • 打赏
  • 举报
回复
学习了
dirdirdir3 2009-08-31
  • 打赏
  • 举报
回复
有窗口才能处理消息,没有创建窗口的话settimer就显得没有意义了.............
ugrg 2009-08-31
  • 打赏
  • 举报
回复
楼上说的对,要create ,貌似你也可以直接使用Windows的setTimer这个函数嘛,

16,548

社区成员

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

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

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