如何显示基于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的应用程序类文件的输出的主要内容,如果未能解决你的问题,请参考以下文章
急急急!mfc中怎么在基于对话框的主界面中显示proppage属性页?最好有例子