dra*_*vic 0 c++ mfc visual-c++
我已经制作了一个自定义控件,当我希望它在屏幕上重新绘制时我调用Invalidate(),然后调用UpdateWindow(),但是我得到了消息:
对于第150行中的文件afxwin2.inl,debug assertion失败,这是:
AFXWIN_INLINE void CWnd::Invalidate(BOOL bErase)
{ ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, NULL, bErase); }
Run Code Online (Sandbox Code Playgroud)
问题是,当我在发布模式下运行相同的应用程序时,它不会报告任何消息!所以这个线索让我觉得这是关于我应该改变的一些环境配置.
你怎么看?
谢谢.
好,
ASSERT(::IsWindow(m_hWnd));
Run Code Online (Sandbox Code Playgroud)
是一个断言.断言是证明某些事情是真实的陈述,如果不是,就会杀死你的程序.它们旨在用于调试和开发,而不是在程序发布后进入程序,因此它们通常仅在调试版本中编译.因此,它不会出现在发布版本中,并且您不会收到错误消息.这并不意味着发布版本中没有问题.它只是意味着它没有运行语句来检查是否存在问题.
我对这个错误知之甚少,但看着它,
::IsWindow(m_hWnd)
Run Code Online (Sandbox Code Playgroud)
显然是假的(因此错误信息).IsWindow()的文档似乎表明问题在于有问题的窗口句柄不是有效窗口的句柄.也许它没有被正确创建,或者它已经被破坏了.你必须弄清楚你的窗口句柄无效的原因.
快速谷歌搜索"mfc iswindow"会在msdn 上显示这个帖子,这可能会对你有所帮助.
| 归档时间: |
|
| 查看次数: |
2822 次 |
| 最近记录: |