Как убедиться, что CPropertyPage был создан ДО того, как пользователь щелкнет по нему в CPropertySheet?
Я создал CPropertySheet
модальное диалоговое окно в MFC (с использованием классов BCGSoft, полученных из CPropertySheet
/ CPropertyPage
). Когда пользователь выполняет определенное действие в одном из CPropertyPage
я хотел бы включить / отключить элемент управления в другом CPropertyPage
,
Это работает просто отлично, если предположить, что пользователь уже нажал на вкладку, чтобы создать вторую CPropertyPage
, Тем не менее, MFC задерживает создание второго CPropertyPage
пока он не активирован пользователем. В этом сценарии контроль во втором CPropertyPage
не существует, и MFC выдает ошибку.
Чтобы преодолеть это, я хотел бы убедиться, что все CPropertyPage
существует, вызывая необходимые функции внутри CPropertySheet
OnInitDialog()
, Может кто-нибудь объяснить, пожалуйста, как это сделать?
3 ответа
Вызов функции CPropertyPage::SetActivePage()
(на фактическом CPropertyPage
объект, конечно) делает свое дело.
Вместо того, чтобы пытаться немедленно включить элементы управления, сделайте это в методе OnActivate для страницы.
Похоже, ваши данные не отделены от пользовательского интерфейса (плохо). Лучше всего перепроектировать свою бизнес-логику, чтобы отделить данные от пользовательского интерфейса, чтобы вы могли заполнять исходные данные даже без пользовательского интерфейса.
Если вам необходимо, в OnInitDialog установите активную страницу для каждой страницы в цикле, а затем активируйте страницу по умолчанию.