后台:所以我创建了一个基本上是大型首选项对话框的应用程序,用户可以在其中配置多个页面,每个页面都有一堆不同的设置。这些设置采用下拉菜单和文本框的形式。我想将所有变量存储到一个巨大的“Parameters.h”文件中,以便我可以从我的应用程序中的任何位置访问它们。每个子页面都有自己的源和头文件。
我的指针遇到了麻烦。我不确定如何引用Parameters类。基本上,我的应用程序有两个主要组件:主对话框和一堆子子页面。主对话框是根据用户在主对话框左侧的列表框中选择的页面显示和隐藏子页面的位置。
我现在正在使用一个子页面,并且有以下内容,但是当我调试时,我得到< BadPtr>到处都是。我已经大大简化了代码,但它应该足以弄清楚我做错了什么。
问题:那么我如何指向每个子对话框中的这个Parameters类,以便我可以存储和使用所有这些变量?
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("")
// [ ... ]
{
}
答案 0 :(得分:0)
问题是你在CSAPrefsDialog::OnInitDialog
中将页面作为局部变量,并且一旦离开函数就会销毁这些变量。您应该将它们作为CSAPrefsDialog
类的成员变量。你正在做的其他事情看起来都不错。