在类构造函数中使用 MFC 按钮控件 EnableWindow 方法时“调试断言失败”

Posted

技术标签:

【中文标题】在类构造函数中使用 MFC 按钮控件 EnableWindow 方法时“调试断言失败”【英文标题】:"Debug Assertion Failed" when MFC button control EnableWindow method is used in class constructor 【发布时间】:2020-05-07 01:44:45 【问题描述】:

我正在使用 Visual Studio 2019 并构建 C++ 桌面应用程序。我有一个从 CDialogEx 继承的对话框类。在这个类中,我有几个按钮,即 CButton 作为成员。 当我在类构造函数中使用 EnableWindow 方法时,它会报告:

调试断言失败!程序 C:\WINDOWS\SYSTEM32\mfc140ud.dll 文件: d....\winocc.cpp 第 345 行

如果我将其注释掉,则应用程序运行良好。知道为什么我有这个错误吗?我想做的就是在对话框出现后立即禁用按钮 - 这就是我在构造函数中使用此方法的原因。

【问题讨论】:

【参考方案1】:

C++ 类与对话窗口及其控件的实际创建是有区别的。

构造函数用于类相关项,而不是窗口相关项。例如,如果你想初始化成员变量,那么构造函数就是它的地方。但是在构建时,没有创建对话窗口,因此不存在子控件,因此您看到了错误。

您可以假设创建窗口的位置在对话框的OnInitDialog 成员函数中。这是您应该能够在控件上调用EnableWindow 的地方。

如果您没有OnInitDialog,您可以使用类向导添加该函数。

【讨论】:

以上是关于在类构造函数中使用 MFC 按钮控件 EnableWindow 方法时“调试断言失败”的主要内容,如果未能解决你的问题,请参考以下文章

MFC 中,按钮和其他(比如:图片框、列表框)控件怎么响应鼠标移动消息?

MFC中给控件添加变量,DoDataExchange中

如何更改MFC按钮的背景色

MFC求助,怎么把多个按钮组合为一个控件?

MFC对话框的按钮控件消息函数不起作用

MFC按钮控件按下和弹起的消息函数分别是啥啊