【问题标题】:How to transfer values as string from class file to output file?如何将值作为字符串从类文件传输到输出文件?
【发布时间】:2019-08-29 04:19:30
【问题描述】:

我是编程初学者,我制作了一个基于 MFC 的 GUI 应用程序,并通过 Cptr 将变量链接到计算类文件。有 3 个类文件 Main Dialog, Calculation & Output。现在我需要将该计算类文件的输出打印到输出对话框。

我已经制作了一个输出对话框及其类和头文件,但我无法将正确的值从一个类传输到另一个类,并且在输出对话框中打印的值是 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);
}

有人可以指出正确的方向以显示正确的计算结果而不是初始结果吗?我想我的顺序有误。

【问题讨论】:

  • Cptr 定义在哪里?
  • Cptr 在 MainDlg 标头中声明。
  • @AndrewTruckle 我还通过 Dlg.variable = 计算变量将计算值分配给一组新定义的变量。它在 Calculation cpp 中显示正确的值,但一旦跳转到 Output cpp,它的值就会变为零。我尝试传输计算值、字符串值,现在直接传输输出变量,但仍然没有传输值。
  • 但是您没有向我们展示所有代码,因此很难为您提供帮助。请向我们展示足够的代码。您是否也尝试过调试您的项目并单步执行它以查看何时出错?
  • @AndrewTruckle 我现在展示了更多代码。在调试代码时,当断点从计算类跳转到输出类时,值变为零。此外,当转换为静态值时,它会在 obj 文件中产生调试错误,因此该选项是不可能的。

标签: c++ visual-studio user-interface mfc


【解决方案1】:

所以基本上解决方案非常简单。 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 未在输出标头中再次声明。这是唯一的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多