从一个Win32控制台应用程序的多个控制台窗口(Multiple console windows f

2019-09-21 10:24发布

我已经写了基于VS2008在Win7上运行64位的空Win32控制台应用程序。 该方案是完全由基于菜单的产卵main.cpp只调用导致基于用户需求等外部接口功能(例如收银员,库存报告等)。 我很想做的是为每个接口都有一个新的控制台窗口。

理想的情况下,将在调用任何其他接口等为用户行进通过它的功能,包括在必要时重新打开主菜单关闭主菜单。

对于这样做的依据是,我开始了新的学期下周潜水更深与C ++面向对象编程,我想去过我的文字,完成与主题进步的顶峰项目,以确保我有所有的基本知识拍下来。 虽然我很愿意这样做的最聪明的,最简单的方法,它是最好的,如果我坚持在书中只暗示给出的有限的知识STL和讲什么像其他库boost

我,当然,也搜查SO和其他地方寻找解决方案。 我已经找到答案,其中大部分落入我的严格的要求外,一些处理从头开始构建一个控制台窗口。 虽然从划痕似乎是最有前途的,它似乎是对付那些没有使用一个强大的IDE像VS,我不知道这是否会造成更多的冲突比它的价值,或者如果它甚至可以在多种使用。 大多数,但是,给我留下的印象是不可能的。 一个例外,这是链接一个控制台的过程。 这是我希望在我的未来!

我来到这,这是提出一个干净的外观在事件中的每个转弯的需要。 起初我,试图清除屏幕就像一个基本功能鬼混void clearScreen(int lines); 但是,这将始终从清澈见底。 所以,如果我的下一个接口之前清除屏幕,它仍然在底部。 如果我清除那么它接受输入,提示仍处于底部。

在情况下,它一直没有明确了这一点。 我的问题是:
是否有可能,在合理范围内,以产生被绑定到多个处理控制台窗口,或者是有一个简单的方法,我不知道该操纵主控制台窗口的滚动?
即使我“需要”保持传统学习的孩子步流程的范围内,我很想听到任何输入除了切换应用程序类型。

这更多的是一种强迫症的问题比任务的要求的,所以这是如果努力是不值得的效益好了。
我很高兴能发布任何代码,我只是没有看到它是如何受益的问题!
Muchos格拉西亚斯!

Answer 1:

有移动光标周围的控制台窗口中没有可移植的办法 - 在Unix / Linux操作系统,您可以发送终端编码的是,在Windows中,我不知道。

什么跨平台工作,而且是非常缓慢的,而不是太好,应该是:

  • 读你的输入字符一个字符
  • 记住屏幕上的下一个字符应该出现
  • 重绘整个屏幕的每个按键后

如果你想要做的更好,你必须打开特定于平台的解决方案,或者找到这会为你做它(像在Unix世界的ncurses)图书馆,但我不知道是否有任何的这些适合您的要求。



Answer 2:

您可以使用在Windows上设置光标位置SetConsoleCursorPosition 。



Answer 3:

既然你说一些关于VS,我认为自己限制到Windows是没有问题的。 如果是这样,你可以使用Windows API的这一点。

除此之外, ncurses的似乎是至少部分地移植到最常见的平台。

如果你正在寻找一种方式,标准C ++来做到这一点 - 它不存在。 C ++并不需要它的运行上,甚至有一个控制台的平台,所以没有控制台操作功能。

两者都不是那么难用,但如果这是真的只是一些学生啄你想到哪里去学习,你可能不应该去一些有用的东西。 控制台的操作是不是你已经或希望经常做。



Answer 4:

虽然它可能不是一直在我原来的问题清楚了,我一直在寻找一个解决方案在控制台窗口中使用。 理想情况下,解决办法是可操作的,至少Linux和Windows,因为我写了学校的所有程序必须在每个编译。 这不是一个任务,但它显然有利于学习的东西都是可用的有作为。

这里是我的发现

...解决方案感谢Tim卫

void clearScreen()
{
    #ifdef _WIN32
        system("cls");
    #else
        system("clear");
    #endif
}

这,就这么简单,因为它是,正是我一直在寻找。 该功能清除屏幕并把光标移动到控制台窗口提供一种方式来提供静态标题或标题有变化的数据表的顶部。 它还允许简单的基于文本的动画 - 如果你喜欢之类的事情。 这让在外观,手感和一致性显著差异在我的控制台应用程序这学期!



文章来源: Multiple console windows from one Win32 console app