"Debug Assertion Failed", когда MF C элемент управления кнопкой EnableWindow используется в конструкторе класса - PullRequest
0 голосов
/ 07 мая 2020

Я использую Visual Studio 2019 и создаю настольное приложение на C ++. У меня есть класс диалога, унаследованный от CDialogEx. В этом классе у меня есть несколько кнопок, например CButton в качестве членов. Когда я использую метод EnableWindow в конструкторе класса, он сообщает:

Debug Assertion Failed! Программа C: \ WINDOWS \ SYSTEM32 \ mfc140ud.dll Файл: d .... \ wino cc. cpp строка 345

Если я закомментировал это, приложение работало нормально. Есть идеи, почему у меня эта ошибка? Все, что я хотел сделать, это отключить кнопки, как только появится диалоговое окно, поэтому я использую этот метод в конструкторе.

enter image description here

1 Ответ

0 голосов
/ 07 мая 2020

Существует разница между классом C ++ и фактическим созданием диалогового окна и его элементов управления.

Конструктор предназначен для элементов, связанных с классом, а не для элементов, связанных с окном. Например, если вы хотите инициализировать переменные-члены, то место для этого будет в конструкторе. Но при создании диалоговое окно не было создано, поэтому дочерние элементы управления не существуют, поэтому вы видите ошибку.

Место, где вы можете предположить, что окно создано, находится в диалоговом 1005 * OnInitDialog функция-член. Здесь вы сможете вызвать EnableWindow на элементах управления.

Если у вас нет OnInitDialog, вы можете добавить эту функцию с помощью мастера классов.

...