gpt4 book ai didi

c++ - Invalidate() 调试断言失败消息(MFC、VC++)

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:29 25 4
gpt4 key购买 nike

我制作了一个自定义控件,当我希望它在屏幕上重新绘制时,我调用 Invalidate(),然后调用 UpdateWindow(),但我收到消息:

第 150 行中文件 afxwin2.inl 的调试断言失败,即:

AFXWIN_INLINE void CWnd::Invalidate(BOOL bErase)

{ ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, NULL, bErase); }

问题是,当我在 Release模式下运行同一个应用程序时,它没有报告任何消息!所以这个线索让我觉得这是关于我应该改变的一些环境配置。

你怎么看?

谢谢。

最佳答案

嗯,

ASSERT(::IsWindow(m_hWnd));

是一个断言。断言是验证某事是否为真的语句,如果不是,则终止你的程序。它们旨在用于调试和开发,而不是在程序发布后用于程序中,因此它们通常只在调试版本中编译。因此,它不会出现在发布版本中,您也不会收到错误消息。这并不意味着发布版本中没有问题。这只是意味着它没有运行语句来检查是否存在问题。

我对有问题的错误了解不多,但看看它,

::IsWindow(m_hWnd)

显然是错误的(因此出现错误消息)。 The documentation for IsWindow()似乎表明问题在于所讨论的窗口句柄不是有效窗口的句柄。也许它没有被正确地创建,或者它已经被销毁了。您必须弄清楚为什么您的窗口句柄无效。

在谷歌上快速搜索“mfc iswindow”会出现 this thread在 msdn 上,这可能对你有帮助。

关于c++ - Invalidate() 调试断言失败消息(MFC、VC++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com