属性页的OnInitDialog()函数中,看不到变量A啊?如何把A传过来?

解决方案 »

  1.   

    有两种办法:
        1、把你的变量定义成全局变量,让它在你的实例的初始化函数中初始化。当然也可以在程序的任何部位进行访问或修改。
        2、把你的对话框类的头文件包含入你的属性页的实现文件中,然后再使用:
                          (你的对话框类名*)AfxGetMainWnd()->A进行访问。  另外,A必须定义和初始化在属性页建立之前,否则程序将运行出错。所以,比较可靠的办法是第一种办法(因为我不能保证属性页和主对话框哪个先初始化,关键看你的属性页是在主对话框OnInitDialog函数中怎么初始化的,是定义在最后,还是CDialog::OnInitDialog()前)。
      

  2.   

    非常感谢仁兄yujunheng给出这么详细的解答!不好意思,由于我刚学vc, 还有些不明白1.如果用第一种办法,我的变量应该放在什么地方定义? 是应用类还是主对话框类中?2.如果用第二种办法,  我的程序欲达到这样的目的: 首先,自定义类的对象A初始化,再用A为各属性页上的若干控件初始化,
     
      请问,怎样做比较好?
    附:主对话框的OnInitDialog()函数BOOL CDLGDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    } SetIcon(m_hIcon, TRUE);
    SetIcon(m_hIcon, FALSE);

    // TODO: Add extra initialization here
    m_MySheet.AddPage(&m_InPage1);
    m_MySheet.AddPage(&m_InPage2);
    m_MySheet.AddPage(&m_OutPage1);
    m_MySheet.AddPage(&m_OutPage2); m_MySheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);

    return TRUE;  
    }
      

  3.   

    在启动属性页之前把变量A初始化,在属性页的OnSetActive()函数中获得变量A并安排给相应的控件。
      

  4.   

    直接在对话框出现之前,m_MySheet.m_Inpage1.m_yourVariable = value;
      

  5.   

    在对话框类调用
    m_MySheet->SetActivePage(属性页号);
    之前把变量A初始化,在属性页的
    OnSetActive();
    函数中获得对话框类的变量A。
      

  6.   

    看来楼主需要一个可实际操作的方法啊
    就把A定义成全局变量好了
    //一种定义全局变量的方法
    在stdafx.cpp中定义如 bool bGlobalA;
    在stdafx.h中 extern bool bGlobalA;//这样就可以在属性页初始化的时候根据A来判断了