Как передать значения в виде строки из файла класса в выходной файл? - PullRequest
0 голосов
/ 08 апреля 2019

Я новичок в программировании, я создал приложение GUI на основе MFC и связал переменные с помощью Cptr с файлом класса вычислений. Есть 3 файла классов Main Dialog, Расчет и Вывод. Теперь мне нужно распечатать выходные данные этого файла класса расчетов в диалоговом окне вывода.

Я создал диалоговое окно «Вывод» вместе с его файлом класса и заголовка, но не могу передать правильные значения из одного класса в другой, и значения, напечатанные в диалоговом окне «Вывод», равны 0,00, поскольку они инициализированы для того же самого .

Расчет cpp:

Output Dlg;
Dlg.m_hvmid1 = HV_Tmid_1;
Dlg.m_hvmid2 = HV_Tmid_2;
Dlg.m_hvmid3 = HV_Tmid_3;
Dlg.m_hvmid4 = HV_Tmid_4;
Dlg.m_lvmid1 = LV_Tmid_1;
Dlg.m_lvmid2 = LV_Tmid_2;
Dlg.m_lvmid3 = LV_Tmid_3;
Dlg.m_lvmid4 = LV_Tmid_4;

Вывод cpp:

Output::Output(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_OUTPUT, pParent)
{

}

Output::~Output()
{

}

void Output::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_HV_MID1, m_d_hvmid1);
    DDX_Text(pDX, IDC_HV_MID2, m_d_hvmid2);
    DDX_Text(pDX, IDC_HV_MID3, m_d_hvmid3);
    DDX_Text(pDX, IDC_HV_MID4, m_d_hvmid4);
    DDX_Text(pDX, IDC_LV_MID1, m_d_lvmid1);
    DDX_Text(pDX, IDC_LV_MID2, m_d_lvmid2);
    DDX_Text(pDX, IDC_LV_MID3, m_d_lvmid3);
    DDX_Text(pDX, IDC_LV_MID4, m_d_lvmid4);

}


BEGIN_MESSAGE_MAP(Output, CDialog)
END_MESSAGE_MAP()


// Output message handlers

BOOL Output::OnInitDialog()
{
    UpdateData();
    CDialog::OnInitDialog();
    AssignDlgToPtr1();

    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}

void Output::AssignDlgToPtr1()
{
    UpdateData();

        m_d_hvmid1.Format(_T("%f"), m_hvmid1);
        m_d_hvmid2.Format(_T("%f"), m_hvmid2);
        m_d_hvmid3.Format(_T("%f"), m_hvmid3);
        m_d_hvmid4.Format(_T("%f"), m_hvmid4);
        m_d_lvmid1.Format(_T("%f"), m_lvmid1);
        m_d_lvmid2.Format(_T("%f"), m_lvmid2);
        m_d_lvmid3.Format(_T("%f"), m_lvmid3);
        m_d_lvmid4.Format(_T("%f"), m_lvmid4);

    UpdateData(0);
}

Код основного диалога:

void CThermalToolDlg::OnCalculate()
{
    UpdateData();
    if (!Validate()) return;
    AssignDlgToPtr();
    Cptr.OnCalculate();

    Output Dlg;
    Dlg.DoModal();

    UpdateData(FALSE);
}

Может ли кто-нибудь указать мне правильное направление, чтобы отображать правильные вычисленные результаты вместо первоначальных? Я думаю, что я неправильно сделал заказ.

1 Ответ

0 голосов
/ 10 апреля 2019

Так что в принципе решение было довольно простым. Cptr - это объект, который был вызван в двух классах. Вместо этого я попытался

void CThermalToolDlg::OnCalculate()
{
    UpdateData();
    if (!Validate()) return;
    AssignDlgToPtr();
    Cptr.OnCalculate();

    Output Dlg;

    Dlg.m_hvmid1 = Cptr.HV_Tmid_1;
    Dlg.m_hvmid2 = Cptr.HV_Tmid_2;
    Dlg.m_hvmid3 = Cptr.HV_Tmid_3;
    Dlg.m_hvmid4 = Cptr.HV_Tmid_4;
    Dlg.m_lvmid1 = Cptr.LV_Tmid_1;
    Dlg.m_lvmid2 = Cptr.LV_Tmid_2;
    Dlg.m_lvmid3 = Cptr.LV_Tmid_3;
    Dlg.m_lvmid4 = Cptr.LV_Tmid_4;
    Dlg.m_amb = Cptr.m_tamb;

    Dlg.DoModal();

    UpdateData(FALSE);
}

Cptr не был объявлен снова в заголовке вывода. Это была единственная ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...