如何显示基于 MFC 的应用程序类文件的输出
How to display output from a MFC based application class file
我是编程初学者,我制作了一个基于 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((是公开的...
相关文章:
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- 如何在 MFC 应用程序中启动 ZeroMQ 线程?
- 视窗 10 :笔(手写笔)在 MFC 应用程序上不起作用
- 从 MFC C++ 6.0 应用程序迁移到 VS 2005
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 由于选项卡顺序的原因,鼠标光标总是得到错误的hwnd-MFC应用程序
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 在 MFC 应用程序中实现 IServiceProvider
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- 如何仅从另一个 MFC 应用程序打开 MFC 应用程序
- 如何将子窗口(MFC 应用程序)的工作区保存到图像
- 在MFC应用程序中缩放RDP ActiveX较大
- 如何创建一个新过程,而没有从管理模式运行的MFC应用程序中的管理特权
- 添加新对话框后,MFC 应用程序启动失败并"DLL Initialization Failed"
- 如何在Windows C MFC应用程序状态栏中禁用CAP NUM SCRL指示器
- MFC-基本MFC应用程序中的D3DCOLORVALUE
- Windows 32 位 mfc 应用程序的虚拟内存中的地址
- 发送消息WM_SETTEXT不适用于 MFC 应用程序的另一个应用程序
- 在 mfc 应用程序中显示数学符号