如何显示基于MFC的应用程序类文件的输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何显示基于MFC的应用程序类文件的输出相关的知识,希望对你有一定的参考价值。

我是编程的初学者,我已经制作了一个基于MFC的GUI应用程序,并通过Cptr将变量链接到一个类文件。现在我需要打印该类文件的输出。输出是变量值,因此我无法显示字符串。

我已经创建了一个“输出”对话框及其类和头文件,但是无法将值从一个类传输到另一个类,并且这些值不会在“输出”对话框中打印。我尝试了TRACE和OutputDebugString,但是我不成功,我不确定传输值是否是正确的选项。

类文件代码:

std::cout << HV_Tmid_1 << std::endl;
std::cout << HV_Tmid_2 << std::endl;
std::cout << HV_Tmid_3 << std::endl;
std::cout << HV_Tmid_4 << std::endl;
std::cout << LV_Tmid_1 << std::endl;
std::cout << LV_Tmid_2 << std::endl;
std::cout << LV_Tmid_3 << std::endl;
std::cout << LV_Tmid_4 << std::endl;

输出对话框类代码:

// Output.cpp : implementation file
//

#include "stdafx.h"
#include "Thermal Tool.h"
#include "Output.h"
#include "afxdialogex.h"
#include "TT.h"
#include <iostream>
#include <sstream>
#include <string>


// Output dialog

IMPLEMENT_DYNAMIC(Output, CDialog)

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

{
    m_d_hvmid1 = _T("");
    m_d_hvmid2 = _T("");
    m_d_hvmid3 = _T("");
    m_d_hvmid4 = _T("");
    m_d_lvmid1 = _T("");
    m_d_lvmid2 = _T("");
    m_d_lvmid3 = _T("");
    m_d_lvmid4 = _T("");
}

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

void Output::AssignDlgToPtr1()
{
        m_d_hvmid1.Format(_T("%f"), Cptr.HV_Tmid_1);
        m_d_hvmid2.Format(_T("%f"), Cptr.HV_Tmid_2);
        m_d_hvmid3.Format(_T("%f"), Cptr.HV_Tmid_3);
        m_d_hvmid4.Format(_T("%f"), Cptr.HV_Tmid_4);
        m_d_lvmid1.Format(_T("%f"), Cptr.LV_Tmid_1);
        m_d_lvmid2.Format(_T("%f"), Cptr.LV_Tmid_2);
        m_d_lvmid3.Format(_T("%f"), Cptr.LV_Tmid_3);
        m_d_lvmid4.Format(_T("%f"), Cptr.LV_Tmid_4);

}

由于输出,输出也显示为空

void CThermalToolDlg::OnCalculate()
{
    UpdateData();
    if (!Validate()) return;
    AssignDlgToPtr();
    Cptr.OnCalculate();
    // need to add something here to run Output Dialog class before displaying output box
    // AssignDlgToPtr1() is not a member in this class;
    Output Dlg;
    Dlg.DoModal();
    UpdateData(FALSE);
}

我希望在输出对话框中打印字符串值。如果有人可以提供正确的代码或指向我正确的教程,我将感激不尽。

答案

你提到CPtr的成员是双打的。假设m_d_?vmid?成员变量声明为CString,您可以使用:

void Output::AssignDlgToPtr1()
{
    m_d_hvmid1.Format( _T("%f"), Cptr.HV_Tmid_1 );
    m_d_hvmid2.Format( _T("%f"), Cptr.HV_Tmid_2 );
    m_d_hvmid3.Format( _T("%f"), Cptr.HV_Tmid_3 );
    m_d_hvmid4.Format( _T("%f"), Cptr.HV_Tmid_4 );
    m_d_lvmid1.Format( _T("%f"), Cptr.LV_Tmid_1 );
    m_d_lvmid2.Format( _T("%f"), Cptr.LV_Tmid_2 );
    m_d_lvmid3.Format( _T("%f"), Cptr.LV_Tmid_3 );
    m_d_lvmid4.Format( _T("%f"), Cptr.LV_Tmid_4 );
}

更多代码添加到问题后更新:AddignDlgToPtr1()永远不会被调用。对话框在调用它时不知道它自己。最好的方法可能是覆盖OnInitDialog

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

   AssignDlgToPtr1();

   UpdateData(FALSE);

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

或者,您也可以覆盖UpdateData(...)方法,但由于您只想显示结果并且看起来不关心编辑,因此上述方法最简单。

此外,在关闭对话框后,在调用者代码中执行“UpdateData(FALSE)”...不需要该行代码。

另一种选择是将调用代码更改为:

void CThermalToolDlg::OnCalculate()
{
    UpdateData();
    if (!Validate()) return;
    AssignDlgToPtr();
    Cptr.OnCalculate();
    // need to add something here to run Output Dialog class before displaying output box
    // AssignDlgToPtr1() is not a member in this class;
    Output Dlg;
    Dlg.AssignDlgToPtr1();
    Dlg.DoModal();
    // UpdateData(FALSE);
}

...假设AddignDlgToPtr1()是公开的......

以上是关于如何显示基于MFC的应用程序类文件的输出的主要内容,如果未能解决你的问题,请参考以下文章

vc6.0里MFC进度条如何使用

控制台程序可以使用MFC里面的一些函数和类吗

急急急!mfc中怎么在基于对话框的主界面中显示proppage属性页?最好有例子

MFC combobox下拉菜单,显示文件夹或者文件目录

MFC:如何修复任务管理器输出中的“TODO <文件描述>(32 位)”?

mfc中怎样在一个基于对话框程序中添加菜单栏 急。。。!