如何在用户在CPropertySheet中单击之前确保已创建CPropertyPage?

时间:2012-05-04 23:41:14

标签: c++ visual-studio visual-studio-2010 mfc

我在MFC中创建了一个基于CPropertySheet的模式对话框(使用从CPropertySheet / CPropertyPage派生的BCGSoft类)。当用户在其中一个CPropertyPage中执行某项操作时,我想在其他CPropertyPage中启用/禁用控件。

这很好用,假设用户已经单击选项卡以实例化第二个CPropertyPage。但是,MFC会延迟创建第二个CPropertyPage,直到用户激活它为止。在这种情况下,第二个CPropertyPage内的控件不存在,并且MFC抛出错误。

为了解决这个问题,我想通过调用CPropertyPage CPropertySheet中的必要函数来确保所有OnInitDialog()都存在。有人可以解释一下如何做到这一点吗?

3 个答案:

答案 0 :(得分:1)

调用函数CPropertyPage::SetActivePage()(当然是在实际的CPropertyPage对象上)可以解决问题。

答案 1 :(得分:0)

听起来你的数据并没有与用户界面分开(这是一件坏事)。最好重新设计业务逻辑,以便将数据与UI分离,这样即使没有UI,也可以填充初始数据。

如果必须,在OnInitDialog中set the active page to each page in a loop,则激活默认页面。

答案 2 :(得分:0)

不要立即尝试启用控件,而是在页面的OnActivate方法中执行此操作。