我创建了以下类
class CNetConfig : public CPropertyPage
class CEMailConfig : public CPropertyPage
class CMessageConfig : public CPropertyPage
class CConfigSheet : public CDialog在CConfigSheet 的OnInitDialog里面进行初始化
CPropertySheet m_sheet;
CEMailConfig m_EMailPropage;
CMessageConfig m_MessagePropage;
CNetConfig      m_NetPropage; m_sheet.AddPage(&m_EMailPropage);
m_sheet.AddPage(&m_MessagePropage);
m_sheet.AddPage(&m_NetPropage);
m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
然后在CConfigSheet里面有一个函数OnButtonOk 用来把三个Tab页里面的配置保存到主程序Dlg.cpp里面的变量里面,但是在程序执行的时候三个Tab页都要点一下,否则会跳出异常?不知道什么原因?
  
 难道点击一下才对Tab页进行创建,该Tab页才有句柄?然后才能使用里面的控件? 各位大侠帮忙解答一下,谢谢~~~~还有一个问题,Windows消息函数有没有相应点击Tab页的,是什么?

解决方案 »

  1.   

    这些代码难道也放在OnInitDialog内了?它们应该是成员变量。CPropertySheet m_sheet; 
    CEMailConfig m_EMailPropage; 
    CMessageConfig m_MessagePropage; 
    CNetConfig      m_NetPropage; 
      

  2.   

    但是在程序执行的时候三个Tab页都要点一下,否则会跳出异常?不知道什么原因? 属性页中的控件是在该属性页被激活是才进行初始化,因此一般如你所说,需要先将每个属性页都先ActivePage一次。
      

  3.   

    需要先将每个属性页都先ActivePage一次。具体怎么做,我现在做三个BOOl变量,然后在属性页的OnSetActive消息函数里面更新这个BOOL变量,然后根据这个BOOL变量来觉得更新那个属性页的值但觉得这样太麻烦,不知道你说那个是什么意思?
      

  4.   

    还有一个问题,Windows消息函数有没有相应点击Tab页的,是什么?
    ///////////////////////////////
    可以重载onsetactive