2

在阅读了我在这里和谷歌中找到的几乎所有内容之后,我还没有找到一个简单而直接的解决方案/示例,关于在 Visual Studio 2008 中的 c++(控制台应用程序 win32,黑色的)中绘制 xy 值。基于这篇文章,我应该使用 MsChart 控件,有人愿意分享一个简单的例子吗?

这篇文章和许多其他文章讨论了不属于 Visual Studio 的库(因此它们不会与 EXE 一起编译,因此不会包含在生成的 EXE 中)或使用 excel 显示图形. 我只想得到一个简单的 xy 图形(以及穿过这些点的线),一点也不担心它是否是全世界最丑最简单的图形,但它必须在我的代码运行后自动出现(可能在新窗口中)或者可能在控制台内?)如果我在另一台电脑上运行这个 EXE,离我的电脑几千公里,代码运行后图形仍然会出现。

我问的东西太复杂了吗?无聊的??我希望我能得到一些答案/示例/解决方案,而不是关闭这篇文章 =) 提前致谢!


@Koushik 再次感谢您的支持!即使我得到了全貌,我也需要一个清晰的例子来做对,所以要投票我想测试这个简单的例子:

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

double f(const double &x) {
    return (
        sin(x)*exp(-x));
}

int main()
{
    unsigned Nplot = 100;
    double x_low = 0.0;
    double x_high = 20.0;
    double h = (x_high - x_low)/(double)Nplot;

    for (unsigned i=0;i<=Nplot;i++)
    {
        double x = x_low + i*h;
        cout << setw(20) << x <<
                setw(20) << f(x) << endl;
    }

    system("pause>nul");
    return 0;
}

这是生成 sin(x) 函数的非常基本的代码。如果在 VC++ 2008 的控制台应用程序 Win32 中复制/粘贴这个(新建项目/Visual C++/Win32/控制台应用程序 Win32/空项目/),屏幕上会出现数据:

在此处输入图像描述

然后,将这些值放在 Excel 中给出:

在此处输入图像描述

我想要这个,但是输出窗口应该出现在控制台中出现值之后,更重要的是,代码不能依赖于 excel 或 Visual C++ 之外的其他东西。因此,编写一些额外的代码来绘制这条线,并且在编译之后,两者都必须在任何计算机上出现/工作,特别是在那些没有 VS 或任何库的计算机中,只需在 Windows 中运行 EXE,仅此而已。那么,有可能吗?您能否分享一个简单的代码示例来绘制这条线(将其添加到上面的代码中)?谢谢!

4

2 回答 2

0

您可以使用 system("appname"); 来调用 gui 应用程序或更确切地说是任何其他应用程序。包括 stdlib.h 标头。您可以做的是创建您的控制台应用程序并准备数据。将这些数据存储在一个文件中,打开可以从文件中读取数据并绘制它的应用程序。

gui 应用程序也不会那么难写,如果你的目标是只绘制 data.in 控制台你真的不能画东西。在 turbo c++ 中我们有这个选项,因为它主要是为 dos 创建的。

算法:1)准备数据,比如沿 x 轴的时间和沿 y 轴的幅度。使用您自己的格式将其存储在文件中。例如: x-ais data y-axis data 。

2).准备一个可以绘制图形的gui应用程序。使用表单的 CreateGraphics() 方法来绘制线条,即轴和数据线。CreateGraphics::drawLine() 和 CreateGraphics::drawLines() 应该有助于您的进步。

编辑:您可以将命令行参数传递给 GUI 应用程序。这个参数可以是数据文件路径

于 2013-02-26T15:34:39.997 回答
0

最简单的事情是让您的控制台应用程序在计算数据后在屏幕上创建一个窗口(是的,控制台应用程序可以使用 GUI),然后WM_PAINT使用BeginPaint/ PolyLine/进行处理EndPaint,使用一些适当的缩放来生成数据 (1)正面朝上和 (2) 适合窗户。

您不会有任何网格线或轴标签,只有绘制的线,但这是最低限度的,无需使用或重新创建整个图形库即可轻松完成。

有关如何将 GUI 添加到程序的示例,请尝试Raymond Chen 的临时程序,C++ 版本。创建一个窗口需要相当多的代码,但幸运的是,您唯一需要更改的是PaintContent()函数。

使用Polyline几乎与您所要求的一样简单——它接受一组数据点。

如果你真的想添加网格线和标签,更多Polyline的调用和ExtTextOut函数就可以解决问题,但很快你就会想要CreatePenSelectObject控制线的颜色和样式(点线、虚线等)。并注意顺序——首先绘制底部的东西,以便以后的调用可以覆盖顶部。


另一方面,如果不需要单个可执行文件,我建议您提供 Gnuplot 的副本(该pgnuplot可执行文件是为从另一个程序调用而设计的)。首先用于wgnuplot调整您的绘图选项,然后将它们pgnuplot与您的数据一起传递。通过这种方式,您将免费获得合理的缩放、网格线和标签,并将结果导出为常见格式,例如 PNG。

于 2018-04-02T05:45:29.257 回答