我有一个对话框程序,又增加了一个设置对话框,用以对主对话框程序中的一些参数进行设置,主对话框有一“设置”按钮以显示设置对话框,在设置对话框中如何获取主对话框中的数据?并在按“确认”按钮后将改动后的值传回主对话框?(也就是全局变量的问题,在C++中不提倡使用全局变量,那这个问题如何解决?)

解决方案 »

  1.   

    class CDialogA: public CDialog
    {
    ...
    };class CDialogB: public CDialog
    {
    ...
    };
    CDialogA::OnConfig()
    {
         CDialogB b;
         b.m_pdlga = this;
         if(b.DoModal()) 
         {
             ...
         }
    }
      

  2.   

    不要用全局变量。基本原则是,不要让设置对话框意识到主对话框的存在。假设主对话框类:CDlgMain设置对话框,假设是CDlgSetting不要让设置对话框去取主对话框的数据,让主对话框把需要的数据传给设置对话框,设置对话框加一个方法接受数据:void CDlgSetting::InitializeData(...);
    主对话框在创建设置对话框后,调用CDlgSetting::InitializeData把需要的数据告诉CDlgSetting:void CDlgMain::OnOpenSettingDlg()
    {
    CDlgSetting dlgSetting;
    dlgSetting.InitializeData(...);if (dlgSetting.DoModal()==IDCANCEL)
        return;设置对话框退出后,不要主动把数据交给主对话框,而是让主对话框来取。设置对话框加一个函数用来取出数据:
    void CDlgSetting::RetrievalData(CData & data);这样,主对话框主动取出数据:
    void CDlgMain::OnOpenSettingDlg()
    {
    CDlgSetting dlgSetting;
    dlgSetting.InitializeData(...);if (dlgSetting.DoModal()==IDCANCEL)
        return;CData data;dlgSetting.RetrievalData(data);...//然后就可以使用data中的数据。这样就不需要全局变量。
      

  3.   

    1。可以用主对话框的指针以获得成员变量
    2。定义static变量,然后调用。(一定要初始化!)
      

  4.   

    HKer_007(健康),static变量跟全局变量没什么本质的差别吧
      

  5.   


    定义全局变量 int number :    extern int number;
      

  6.   

    对于设置对话框调用主对话框:    主对话框用全局变量表示,这样就可以调用了(其实VC自动生成了吧?
    )!主对话框调用设置对话框中的内容,如下所示:void CMainDlg::SomeFunction()
    {
        CSetupDlg dlg;
        if (dlg.DoModal() == IDCANCEL)
            return;    int count = dlg.count;
    }
    其实 VC 并不是完全面向对象的,所以没有那么多讲究,解决问题才是关键!有的事情很简单,但有人却使它不简单!
      

  7.   

    同意stonespace(stonespace) 的做法。
      

  8.   

    你重载一个设置对话框的构造函数,在那里面把主对话框的变量的地址传进去,然后通过地址改值。如果要更新主对话框的显示,调用GETPARENT()->UPDATEDATA()就行。