导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

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

韦翔罂 2009-08-31 10:23:09
我从CWnd派生了一个类,并给这个类添加了定时器消息处理,但在SetTimer(id,interval,NULL)这个函数调用的地方无法通过,总是弹出程序终止的对话框并终止了程序。
单步调试发现是在SetTimer(id,interval,NULL)这个函数调用的地方,进入到AFXWIN2.INL文件,在其中的“ASSERT(::IsWindow(m_hWnd));”这一句就发生了上面的现象。
是不是因为m_hWnd为空或者它的值不是一个窗口所以才会这样的?(当然,在实际运行中这个变量的值确实是空的,因为没必要给它赋值哦。难道一定要给它赋值吗?)
请高手指点!
...全文
90 点赞 收藏 7
写回复
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这个函数嘛,
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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