Файл параметров для хранения всех переменных - PullRequest
2 голосов
/ 21 июля 2011

Справочная информация: Итак, я создал приложение, которое в основном представляет собой большой диалог настроек, в котором пользователь может настроить несколько страниц, каждая из которых имеет множество различных настроек. Эти настройки представлены в виде раскрывающихся списков и текстовых полей. Я хочу сохранить все переменные в одном массивном файле «Parameters.h», чтобы я мог получить к ним доступ из любого места в моем приложении. Каждая подстраница имеет собственный исходный файл и файл заголовка.

У меня проблемы с указателями. Я не уверен, как ссылаться на класс параметров. По сути, мое приложение имеет два основных компонента: главный диалог и несколько дочерних страниц. В главном диалоговом окне подстраницы отображаются и скрываются в зависимости от того, какую страницу пользователь выбирает в списке слева от основного диалогового окна.

Я просто сейчас работаю с одной подстраницей, и у меня есть следующее, но когда я отлаживаюсь, я получаю повсюду. Я значительно упростил код, но этого должно быть достаточно, чтобы понять, что я делаю неправильно.

Вопрос: Итак, как мне указать этот класс параметров в каждом поддиалоге, чтобы я мог сохранить и использовать все эти переменные?


SAPrefsDialog.cpp: главное диалоговое окно с вложенными страницами

BOOL CSAPrefsDialog::OnInitDialog() 
{
    CDialog::OnInitDialog();
    FSC_Main fscMain;
    fscMain.SetParametersPointer(&m_pParams);
    // [ ... ]
}

SAPrefsDialog.h: заголовочный файл основного диалога

#include "Parameters.h"

public:
    CSAPrefsDialog(CWnd* pParent = NULL);   // standard constructor
   ~CSAPrefsDialog();

    Parameters m_pParams;

FSC_Main.h: заголовочный файл подстраницы

#include "Parameters.h"

class FSC_Main : public CSAPrefsSubDlg
{
// Construction
public:
    FSC_Main(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
    //{{AFX_DATA(FSC_Main)
    enum { IDD = IDD_FS_CONFIG_MAIN };
    //}}AFX_DATA

public:

    void SetParametersPointer(Parameters* pParameters)
        { m_Params = pParameters; }

private:
    Parameters *m_Params;
};

Parameters.h

#include "stdafx.h"
#include "prefs.h"

#pragma once

class Parameters
{
public:
        Parameters();   // standard constructor
public:
    ~Parameters(void);

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

public:

//*****************************************************************************
//
// FSC_Main.cpp Variables
//
//*****************************************************************************

    CString m_strVehiclesMainNumVehicles;
    CString m_strVehiclesMainMaxSensorCount;
    CString m_strVehiclesMainTaskProcessingInterval;
    CString m_strVehiclesMain
    // [ ... ]

Parameters.cpp

#include "stdafx.h"
#include "prefs.h"
#include "pages.h"
#include "Parameters.h"

//*****************************************************************************
//
// Parameters::Parameters
//
//*****************************************************************************

Parameters::Parameters():
      m_strVehiclesMainNumVehicles("")
    , m_strVehiclesMainMaxSensorCount("")
    , m_strVehiclesMainTaskProcessingInterval("")
    // [ ... ]
{
}

1 Ответ

0 голосов
/ 21 июля 2011

Проблема в том, что вы делаете страницы локальными переменными в CSAPrefsDialog::OnInitDialog, и эти переменные уничтожаются, как только вы выходите из функции. Вы должны сделать их переменными-членами вашего CSAPrefsDialog класса. Все остальное, что вы делаете, выглядит хорошо.

...