我在MFC中创建了一个基于CPropertySheet
的模式对话框(使用从CPropertySheet
/ CPropertyPage
派生的BCGSoft类)。当用户在其中一个CPropertyPage
中执行某项操作时,我想在其他CPropertyPage
中启用/禁用控件。
这很好用,假设用户已经单击选项卡以实例化第二个CPropertyPage
。但是,MFC会延迟创建第二个CPropertyPage
,直到用户激活它为止。在这种情况下,第二个CPropertyPage
内的控件不存在,并且MFC抛出错误。
为了解决这个问题,我想通过调用CPropertyPage
CPropertySheet
中的必要函数来确保所有OnInitDialog()
都存在。有人可以解释一下如何做到这一点吗?
答案 0 :(得分:1)
调用函数CPropertyPage::SetActivePage()
(当然是在实际的CPropertyPage
对象上)可以解决问题。
答案 1 :(得分:0)
听起来你的数据并没有与用户界面分开(这是一件坏事)。最好重新设计业务逻辑,以便将数据与UI分离,这样即使没有UI,也可以填充初始数据。
如果必须,在OnInitDialog中set the active page to each page in a loop,则激活默认页面。
答案 2 :(得分:0)
不要立即尝试启用控件,而是在页面的OnActivate方法中执行此操作。