Как убедиться, что CPropertyPage был создан ДО того, как пользователь щелкнет по нему в CPropertySheet?

Я создал CPropertySheetмодальное диалоговое окно в MFC (с использованием классов BCGSoft, полученных из CPropertySheet / CPropertyPage). Когда пользователь выполняет определенное действие в одном из CPropertyPageя хотел бы включить / отключить элемент управления в другом CPropertyPage,

Это работает просто отлично, если предположить, что пользователь уже нажал на вкладку, чтобы создать вторую CPropertyPage, Тем не менее, MFC задерживает создание второго CPropertyPage пока он не активирован пользователем. В этом сценарии контроль во втором CPropertyPage не существует, и MFC выдает ошибку.

Чтобы преодолеть это, я хотел бы убедиться, что все CPropertyPageсуществует, вызывая необходимые функции внутри CPropertySheetOnInitDialog(), Может кто-нибудь объяснить, пожалуйста, как это сделать?

3 ответа

Решение

Вызов функции CPropertyPage::SetActivePage() (на фактическом CPropertyPage объект, конечно) делает свое дело.

Вместо того, чтобы пытаться немедленно включить элементы управления, сделайте это в методе OnActivate для страницы.

Похоже, ваши данные не отделены от пользовательского интерфейса (плохо). Лучше всего перепроектировать свою бизнес-логику, чтобы отделить данные от пользовательского интерфейса, чтобы вы могли заполнять исходные данные даже без пользовательского интерфейса.

Если вам необходимо, в OnInitDialog установите активную страницу для каждой страницы в цикле, а затем активируйте страницу по умолчанию.

Другие вопросы по тегам