【问题标题】:Replacing std::cout output with windows form用 windows 形式替换 std::cout 输出
【发布时间】:2016-03-27 18:47:48
【问题描述】:

我用 c++ (visual studio 2010) 编写了一个程序,它查找串行 com 端口并将它们的友好名称与定义的文本进行比较。当匹配端口打开/连接并开始串行通信时。

程序在找到com端口时通知用户,连接是否成功,数据发送是否成功以及其他有用的信息。程序使用cout通知用户。

我想用 windows 窗体替换控制台输出窗口,但在网上找不到太多关于如何做到这一点的资源。为了说明,我想要这个:

变成这样:

我包含了 form1.h 和其他文件,并尝试将 cout 替换为以下行,但代码未编译:

Form1::textBox1->Text = L" Text I want to display";

谁能解释一下如何使用 textBox1,或者这个教程?

【问题讨论】:

  • "但是代码没有编译" => 一定要包含你遇到的具体错误。即使有人可以看到问题,它也可能不是您遇到的唯一问题。 (想象一下,如果您看到“找不到文件”但也存在语法错误,例如...修复语法错误可能对找不到文件没有任何作用。) 除此之外,如果可能的话,应该提供Minimal, Complete, Verifiable Example——一行代码不如演示特定问题的最小程序。

标签: c++ windows winforms


【解决方案1】:

“我包含了 form1.h” - 你不能随便抓取随机文件并希望它能正常工作。这不是 C++ 的工作方式,也不是一般的计算机。

那么你怎么做这样的事情?标准库提供std::cout,Visual Studio 默认包含标准库,因此使用起来相当容易。但是对于图形,您将需要另一个库。我推荐 Qt,如果只是因为有适合初学者的好教程。

【讨论】:

    【解决方案2】:

    所以我终于实现了我在上面的问题中描述的功能,并认为我应该在这里发布我的发现。

    要将我的代码从控制台输出转换为 Windows 窗体,我基本上必须从 c++ 迁移到 C++/cli。

    holowczak.com 有一个很棒的教程,介绍如何在 Visual Studio 中开始使用 windows 窗体 (c++/cli)。

    接下来,如果您的 c++ 代码中有任何繁忙的循环(如无限 while 循环),那么您需要在单独的线程上运行该繁忙的循环,否则程序可能会挂起。 Dr.Dobb's c++/cli 中创建和管理线程的教程,对你有很大帮助。

    最后,如果您需要从另一个线程访问窗口窗体的资源(例如文本框和其他控件),则必须进行线程安全调用。 Microsoft 的“HowTo:Make thread-safe call to windows Form controls”解释了如何使用 invoke 方法从另一个线程更新文本框。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多