"Debug Assertion Failed" 当在 class 构造函数中使用 MFC 按钮控件 EnableWindow 方法时
"Debug Assertion Failed" when MFC button control EnableWindow method is used in class constructor
我正在使用 Visual Studio 2019 并构建一个 C++ 桌面应用程序。我有一个从 CDialogEx 继承的对话框 class。在这个 class 中,我有几个按钮,即 CButton 作为成员。
当我在 class 构造函数中使用 EnableWindow 方法时,它报告:
Debug Assertion Failed! Program C:\WINDOWS\SYSTEM32\mfc140ud.dll File:
d....\winocc.cpp line 345
如果我将其注释掉,应用程序运行良好。知道为什么我有这个错误吗?我只想在对话框出现后立即禁用按钮 - 这就是我在构造函数中使用此方法的原因。
C++ class 与对话框 window 及其控件的实际创建之间存在差异。
构造函数用于 class 相关项目,而不是 window 相关项目。例如,如果你想初始化成员变量,那么构造函数就是它的地方。但是在构造过程中,没有创建对话框 window,因此不存在子控件,因此出现了您看到的错误。
您可以假设创建 window 的地方是在对话框的 OnInitDialog 成员函数中。这是您应该能够在控件上调用 EnableWindow
的地方。
如果您没有 OnInitDialog
,您可以使用 class 向导添加该功能。
我正在使用 Visual Studio 2019 并构建一个 C++ 桌面应用程序。我有一个从 CDialogEx 继承的对话框 class。在这个 class 中,我有几个按钮,即 CButton 作为成员。 当我在 class 构造函数中使用 EnableWindow 方法时,它报告:
Debug Assertion Failed! Program C:\WINDOWS\SYSTEM32\mfc140ud.dll File: d....\winocc.cpp line 345
如果我将其注释掉,应用程序运行良好。知道为什么我有这个错误吗?我只想在对话框出现后立即禁用按钮 - 这就是我在构造函数中使用此方法的原因。
C++ class 与对话框 window 及其控件的实际创建之间存在差异。
构造函数用于 class 相关项目,而不是 window 相关项目。例如,如果你想初始化成员变量,那么构造函数就是它的地方。但是在构造过程中,没有创建对话框 window,因此不存在子控件,因此出现了您看到的错误。
您可以假设创建 window 的地方是在对话框的 OnInitDialog 成员函数中。这是您应该能够在控件上调用 EnableWindow
的地方。
如果您没有 OnInitDialog
,您可以使用 class 向导添加该功能。