建了个三页的模态属性表,在按“确定”键后对每一个页里的控件交换数据和设置某些控件的状态
不用UpdateData()!因为要设置某些控件的状态。
请问需要在那里重载“确定”键的处理函数来处理三个页,那里方便??
请说详细一点!谢谢

解决方案 »

  1.   

    你是用的CPropertySheet、CPropertyPage类还是CTabCtrl控件来做属性页的?
    如果是前者:需要在CPropertySheet的派生类添加“确定”按钮的响应消息。步骤如下:1、源文件中添加
    BEGIN_MESSAGE_MAP(CMyPropertySheet, CPropertySheet) //CMyPropertySheet为派生类
    ON_BN_CLICKED(PSBTN_OK,OnOk)
    END_MESSAGE_MAP()
    2、在头文件中添加afx_msg void OnOk();
    3、添加处理函数CMyPropertySheet::OnOk(){//...}如果是后者,直接双击“确定”添加消息处理函数。
      

  2.   

    在第一个页面的的类中添加一个虚函数OnApply()
      

  3.   

    是这样的:
    在主对话框类CMyDlg中声明三个变量:
    CPage3   m_page3; 
    CPage2   m_page2; 
    CPage1   m_page1; 
    CPropertySheet   m_sheet; 在主对话框类CMyDlg的初始化函数中加入如下代码: 
    m_sheet.AddPage(&m_page1); 
    m_sheet.AddPage(&m_page2);
    m_sheet.AddPage(&m_page3);我那3个m_page对象 不是放在CPropertySheet类里面的,如果用你的方法,那些控件:
    不知怎么用?还有个问题!如果我在每个属性页里都重载了xxPage::OnOk();而在CPropertySheet类
    里不重载CMyPropertySheet::OnOk();那么在运行时按“确定”键时,是否三个属性页的OnOk();都同时执行??
      

  4.   

    CPage3  CPage2   CPage1  里对相应控件关联相应的变量 
    然后m_page3;  m_page2;  m_page1; 调用就是咯
      

  5.   

    只重载CPropertySheet::OnOK()就行了。如果你想要改变某个page的状态,需要用CPage类中调用SetModified()函数。
      

  6.   

    用楼上的方法重载了CPropertySheet::OnOK()
    但是在运行按“确定”键时,无论怎样都退不出OnOK()函数!交换不了数据!!
    是否要返回些什么的??
    后来发现每当打开过的页,在按“确定”键后它都会触发该页里的OnApply(),就这样搞定了
      

  7.   

    你退不出 OnOK()函数,是因为在需要在这个函数末尾需要调用一下CPropertySheet::OnOK();